我有一个在C中编写shell代码的任务。其中一个shell命令是" quit kill"我必须在关闭主进程之前向所有子进程发送TERM信号。 如果子进程没有关闭5秒,我必须发送一个KILL信号来杀死它。 现在我已经编写了代码,我想测试它,我不知道怎么样,那么你们有没有想到一个忽略TERM信号的过程? 这是我为终止一个子进程而编写的代码:
kill(pid,SIGTERM);
t = time(NULL);
while(1){
int state = waitpid(pid,&status,WNOHANG);
if(state<0){
perror("Error ");
exit(0);
}
if(state == 0){
if((time(NULL)-t)>5){
printf("(5 sec passed) Sending SIGKILL… Done.\n");
kill(pid,SIGKILL);
break;
}
}
else{
printf("Done.\n");
break;
}
}
答案 0 :(得分:4)
此bash脚本忽略了TERM:
#!/bin/bash
trap '' TERM
cat
将其放入文件并启动。然后尝试用TERM杀死它。
答案 1 :(得分:3)
添加必要的包含
#include <signal.h>
声明一个不执行任何操作的函数,例如
void nothing(int x) {
// nothing
}
在&#34;受保护&#34;的开头添加流程代码
signal(SIGTERM, nothing);
(您也可以在不使用signal(SIGTERM, SIG_IGN);
功能的情况下执行nothing()
- 来自@rici评论)
然后,该进程将捕获主代码发送的TERM信号,并执行不执行任何操作的函数nothing()
。