【发布时间】:2018-04-06 21:15:37
【问题描述】:
假设我有一个程序foo,它只是永久打印但在此之前停止,
int main(int argc, char * argv[])
{
kill(getpid(), SIGSTOP);
while(1) {
printf("foo\n");
}
return 0;
}
然后我有一个程序bar,它分叉并运行foo:
int main(int argc, char * argv[])
{
pid_t pid = fork();
if (pid == 0)
{
execl("foo", "foo", NULL);
}
return 0;
}
现在,我希望 bar 能够向 foo 发送 SIGCONT,以便它可以继续其打印任务,然后再次发送 SIGSTOP,甚至稍后再次发送 SIGCONT,等等。
我不知道该怎么做。有什么帮助吗?
编辑:我发现了我的问题。显然,foo 程序在运行时还没有准备好立即接受信号。当我这样做时
sleep(5);
int rc = kill(pid, SIGCONT);
成功了。
【问题讨论】:
-
请edit您的问题是 (1) 显示您尝试过的内容,(2) 准确解释您尝试时发生的情况,以及 (3) 删除编辑。然后(4)发布一个解释解决方案的答案。附:情况可能不是“
foo程序在运行时还没有准备好立即接受信号”;可能是您在foo进程自行停止之前发送了 SIGCONT 信号。向正在运行(即未停止)的进程发送继续信号是无操作(即未排队)。您可以通过在foo.c的开头添加sleep(6)来通过实验验证这一点。 -
哦。你可能是对的。
-
当 PID > 0 时,它在父进程中运行,因此可以向特定的 'pid' 发送信号
标签: process c signals exec fork