小编fri*_*ich的帖子

SIGSTOP/SIGCONT POSIX 行为

我正在玩弄信号:SIGSTOP特别SIGCONT是。这是我写的一个测试程序。这个想法是创建一个 N + 1 个进程链(包括主进程)。每个人都必须等待其孩子停止,然后自己停止。当子进程停止时,主进程必须唤醒它的子进程。

为此,该f函数递归地创建流程链。SIGCHLD除了最后一个直接停止自身的子进程之外,每个进程都对信号使用 sigsuspend 。当它的子进程停止时,进程将收到信号SIGCHLD,然后它可以轮流停止。当主进程收到SIGCHLD信号时,意味着所有进程都处于停止状态,因此它会将信号发送SIGCONT给其子进程。每个进程都会发送SIGCONT给自己的子进程,然后退出,除了最后一个刚刚退出的子进程。

我试图说清楚:删除了返回代码测试并写了一些注释。

执行程序时,除了链条之外,一切似乎都很好SIGCONT 。一些进程被唤醒,但不是全部。查看正在运行的程序(例如 ps),一切似乎都很好:没有阻塞的进程。我真的不明白这个程序可能有什么问题。欢迎任何帮助或提示。

这是一个示例跟踪。正如您所看到的,“分叉链”进展顺利,进程在 上挂起SIGCHLD。然后最后一个子进程生成并停止。这会SIGCHLD在父进程上创建一条“链”,因为每个进程都会自行停止。当主进程收到通知时,SIGCHLD它会发送SIGCONT给它的子进程,子进程会被唤醒,然后发送SIGCONT给它自己的子进程,等等。您可以注意到这个链并不完整:

$ ./bin/trycont 
n   pid     log
0   6257    "suspending on SIGCHLD"
1   6258    "suspending on SIGCHLD"
2   6259    "suspending on SIGCHLD"
3   6260    "suspending on SIGCHLD"
4   6261    "suspending on SIGCHLD"
5   6262    "last child - stopping"
4   6261    "got …
Run Code Online (Sandbox Code Playgroud)

c posix fork signals

4
推荐指数
1
解决办法
1875
查看次数

标签 统计

c ×1

fork ×1

posix ×1

signals ×1