#include <sys/types.h>
#include <stddef.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <signal.h>
#include <iostream>
#include <unistd.h>
int main(){
signal(SIGCHLD,SIG_IGN );
pid_t pid = vfork();
if(pid <0){
std::cout<< "Error: Fork failed at main!!!";
exit(1);
}else if (0 == pid){
char * cmd[] ={(char*)"../work/C++11/Prj_LargeFile/script/Logger.pl",NULL};
//char * cmd[] = {(char*)"pwd",NULL};
//char * cmd[] = {(char*)"/usr/bin/perl",(char*)"../work/C++11/Prj_LargeFile/script/Logger.pl",NULL};
execvp(cmd[0],cmd);
_exit(0);
}
}
我希望有一个孤立的子进程,它将在后台运行一个 perl 脚本,并且我希望父进程在不等待其子进程的情况下完成。因此,我在开始时使用了 signal(SIGCHLD,SIG_IGN) 来忽略完成时的子信号并避免僵尸。但是当我运行代码时,它给我的错误是不能忽略信号 CHLD,强制默认。. 另一方面,当我运行那些注释行而不是运行所需的信号时。这是什么原因?