Tag: 处理

信号处理和sigemptyset()

任何人都可以用一种非常简单的方式来解释sigemptyset()的作用吗? 为什么有用? 我读了一堆定义,但我只是不明白。 从我收集的内容中,它跟踪用于阻止目的的信号? 我不太清楚我明白为什么那会有用。 是这样我们不能递归地得到那个特定的信号吗? 使用sigemptyset()的基本示例: #include #include #include int main(){ struct sigaction act; sigemptyset(&act.sa_mask); act.sa_handler=function_name; act.sa_flags=0; sigaction(SIGINT, &act, 0); }

为什么进程子进程会执行一些意外的行?

所以我开始知道进程如何工作并编写了一些简单的代码。 #include #include #include #include int SemId; void SemGet(int n) { SemId = semget(IPC_PRIVATE, n, 0600); if (SemId == -1) { exit(1); } } int SemSetVal(int SemNum, int SemVal) { return semctl(SemId, SemNum, SETVAL, SemVal); } int SemOp(int SemNum, int SemOp) { struct sembuf SemBuf; SemBuf.sem_num = SemNum; SemBuf.sem_op = SemOp; SemBuf.sem_flg = 0; return […]

C fork处理全局变量

我不理解这个程序的输出: #include #include #include int i = 0; int main() { while(i<3) { fork(); printf("%d\n",i); ++i; } } 输出是: 0 1 2 2 1 2 0 1 2 2 2 1 2 2 可以请有人告诉我如何解决这个问题,以便完全理解为什么我得到这个输出?

如何让tcsetpgrp()在C中工作?

我正在尝试给孩子进程(通过fork() )前台访问终端。 在fork() ,我在子进程中运行以下代码: setpgid(0, 0); 和: setpgid(child, child); 在父进程中。 这为孩子提供了自己的过程组。 对setpgid()的调用正常。 现在我想让孩子访问终端。 在setpgid()调用之后,我向子setpgid()添加了以下内容: if (!tcsetpgrp(STDIN_FILENO, getpid())) { perror(“tcsetpgrp failed”); } 之后,有一个execv()命令来生成/usr/bin/nano 。 然而,没有nano出现,没有任何反应,终端看起来好像它期待用户输入。 此外,在tcsetpgrp()调用之后似乎没有代码执行。 我在某处读到了我需要向子进程发送SIGCONT信号以使其工作。 如果该过程停止,我该怎么办? 父母是否必须发送信号? 如果这是解决方案,我该如何发送SIGCONT信号? raise(SIGCONT); 此外,我不确定这是否有帮助,但代码工作正常,如果我运行我的程序,则生成nano : exec ./program 代替: ./program 有任何想法吗? 非常感谢!