C 即使我向子进程发送了SIGABRT,它也会正常退出
我尝试了一些进程操作,比如fork()ing和exec()ing,我尝试了这个例子,在这个例子中,父进程等待他的子进程返回,并测试他的子进程是否正常结束(通过exit()ing或返回给调用方)或异常结束(接收信号,如SIGABRT)C 即使我向子进程发送了SIGABRT,它也会正常退出,c,linux,C,Linux,我尝试了一些进程操作,比如fork()ing和exec()ing,我尝试了这个例子,在这个例子中,父进程等待他的子进程返回,并测试他的子进程是否正常结束(通过exit()ing或返回给调用方)或异常结束(接收信号,如SIGABRT) #包括 #包括 #包括 #包括 #包括 int spawn(字符*程序,字符**参数列表) { pid_t child_pid; child_pid=fork(); 如果(子pid!=0) 返回子对象; 否则{ execvp(程序、参数列表); 中止(); } }
#包括
#包括
#包括
#包括
#包括
int spawn(字符*程序,字符**参数列表)
{
pid_t child_pid;
child_pid=fork();
如果(子pid!=0)
返回子对象;
否则{
execvp(程序、参数列表);
中止();
}
}
int main()
{
国际儿童基金会地位;
char*arg_list[]={“ls”,“/”,NULL};
产卵(“ls”,arg_列表);
等待(&child_状态);
如果(妻子退出(子女身份))
printf(“子进程正常退出,退出代码为%d\n”,
妇女地位(儿童地位);
其他的
printf(“子进程异常退出\n”);
返回0;
}
我希望看到句子“子进程异常退出”,但我看到“子进程正常退出,退出代码为0”!!!即使子进程以调用abort()结束,该函数发送SIGABRT
有什么帮助吗?
提前感谢当您调用
exec()
系列中的任何函数时,当前正在执行的程序将替换为调用exec()
中指定的程序。这意味着永远不会调用abort()
。因此,ls程序运行到completeion,然后正常退出。当您调用exec()
系列中的任何函数时,当前正在执行的程序将替换为调用exec()
中指定的程序。这意味着永远不会调用abort()
。因此ls程序运行到completeion,然后正常退出
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
int spawn (char* program, char** arg_list)
{
pid_t child_pid;
child_pid = fork ();
if (child_pid != 0)
return child_pid;
else {
execvp (program, arg_list);
abort();
}
}
int main ()
{
int child_status;
char* arg_list[] = {"ls","/",NULL};
spawn ("ls", arg_list);
wait (&child_status);
if (WIFEXITED (child_status))
printf ("the child process exited normally, with exit code %d\n",
WEXITSTATUS (child_status));
else
printf ("the child process exited abnormally\n");
return 0;
}