C 终止系统调用后移除终端台面
我正在用以下方法杀死一个来自父母的孩子:C 终止系统调用后移除终端台面,c,process,operating-system,system-calls,kill,C,Process,Operating System,System Calls,Kill,我正在用以下方法杀死一个来自父母的孩子: kill(pid, SIGTERM); 它输出到终端 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
kill(pid, SIGTERM);
它输出到终端
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]不是合法的系统调用,我想退出在此之后创建的所有程序(包括父程序和子程序)。是否可以尝试此方法而不是kill指令:
sprintf(str, "kill -SIGINT %d >> /dev/null 2>&1",pid);
system(str);
系统用于在shell中执行命令。
“>>/dev/null 2>&1”正在将打印重定向到/dev/null,换句话说,放弃打印答案(“已终止”)。可以尝试SIGINT。我不记得当你用CTRL+C组合键杀人时看到过一条消息……是的。发送SIGINT(2)会导致死机。发送SIGKILL(9)会导致打印“Killed”。您可以使用kill-2测试您的案例,但当我使用SIGINT时,它会添加一行新行。是否可以从输出中删除\n我的观点是,
终止
/只有当父进程被信号终止时才会发生任何事情。如果您的子进程被信号终止,并且父进程等待它,shell将不会打印任何内容。您是否可以尝试使用此命令代替终止指令:sprintf(str,“kill-SIGINT%d>/dev/null 2>&1”,pid);系统(str);你能解释一下它的作用吗,这样将来也会有帮助。我的理解是:kill-SIGINT pid==kill(getpid(),SIGINT);//杀死鹦鹉;dev/null将标准输出重定向到/dev/null,后者将丢弃它;2> &1->将STDERR重定向到stdout有许多文章介绍打印重定向机制。一个例子: