【发布时间】:2018-10-22 22:33:45
【问题描述】:
我必须派生两个阻塞 SIGINT 命令的子进程,但其中一个应该在接收到 SIGTERM 信号时解除阻塞,而另一个子进程和父进程都打印它们的 PID 作为相同 SIGTERM 的结果信号。第二个子进程应立即终止,但父进程应等待其子进程结束然后停止。
我刚开始在 Linux 中学习 C 编程,但我并不真正了解分叉和信号是如何工作的。据我了解,到目前为止我编写的这段代码将分叉一个进程,并且子进程将阻止 Ctrl-C 命令,整个过程将永远运行,除非我用 kill -9 pid。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void handler(int n) {
write(STDOUT_FILENO, "I won't die!! Haha\n",13);
}
int main()
{
pid_t pid = fork();
if (pid < 0) {
perror("Fork() error!");
exit(-1);
}
if (pid == 0)
signal(SIGINT,handler);
while(1) {
printf("Wasting the iteration. %d\n", getpid());
sleep(1);
}
return 0;
}
- 我该如何使用 SIGTERM?我应该在哪里称呼它?
- 如何让父进程创建另一个阻止 Ctrl-C 命令的子进程?
【问题讨论】:
-
* 不是免费的编码服务。所以希望你try to solve your own problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)
标签: linux process signals fork