【发布时间】:2018-05-09 16:59:30
【问题描述】:
我正在使用以下方法杀死父母的孩子:
kill(pid, SIGTERM);
输出到终端
Terminated
Terminated 怎么不显示?
pid_t pid ;
pid = fork();
if(pid == 0){ // pid is process index id in parent process
wait(NULL); // wait for state changes in child
if(execlp(argv[1],argv[1],NULL) == -1){ // argv1 can be either valid or invalid (for example ls or alsjdf)
char str[128];
sprintf(str, "./multifork: %s",argv[1]);
perror(str);
kill(pid, SIGINT);
}
}
如果 argv[1] 不是一个合法的系统调用,我想退出所有程序——包括父程序和子程序,它们都是在那之后创建的。
【问题讨论】:
-
可以尝试 SIGINT。我不记得当你用 CTRL+C 杀死时看到消息...
-
是的。发送 SIGINT(2) 会默默地杀死。发送 SIGKILL(9) 会导致打印“Killed”。您可以使用 kill -2
测试您的情况 -
但是当我使用 SIGINT 时它添加了一个新行。可以从输出中删除\n
-
我的意思是
Terminated/ 什么都会仅在 parent 进程被信号杀死时发生。如果您的子进程被信号杀死并且父进程等待它,shell 将不会打印任何内容。 -
你可以试试这个而不是 kill 指令: sprintf(str, "kill -SIGINT %d >> /dev/null 2>&1",pid);系统(str);
标签: c process operating-system system-calls kill