Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 终止系统调用后移除终端台面_C_Process_Operating System_System Calls_Kill - Fatal编程技术网

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有许多文章介绍打印重定向机制。一个例子: