gpt4 book ai didi

c++ - 如何捕获父进程中的Term操作信号?

转载 作者:行者123 更新时间:2023-11-30 17:27:46 25 4
gpt4 key购买 nike

我是LINUX C编程新手,我的任务是编写一个关于进程的程序。

我需要处理两个进程,父进程和子进程。

我的目标是让父进程fork一个进程(子进程),然后子进程执行一个可能终止失败的程序。父进程等待子进程终止,并获取子进程发出的信号,例如abort或segmentation failure。

但是,我遇到了一些问题。

我发现“Core Action”信号很容易被检测到,但“Term action”却检测不到!!

无法检测到“术语操作”信号,例如 SIGALRM(14) 或 SIGINT(2)。它似乎被归类为终止成功。

这是我的代码:

#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <cstring>
#include <errno.h>
using namespace std;


bool check = true;

void mySignal( int sig ){
int status;
pid_t childPid = wait( &status ) ;


if( WIFEXITED( status ) ){
printf("The child is terminated success!!\n");
}
else{
if( WIFSIGNALED( status ) ){
int termsig = WTERMSIG( status ) ;
printf("termsig = %d %d\n",status, termsig ) ;
}
}
check = false ;
}


int main( int argc , char *argv[] ){

signal( SIGCHLD, mySignal ) ;
pid_t pid = fork() ;


if( pid < 0 ){
printf("fork error\n");
exit( -1 ) ;
}
else if( pid == 0 ){
execl( argv[1], NULL );
exit( 0 ) ;
}

while( check ) ;
return 0 ;
}

有谁知道如何解决这个问题吗?

最佳答案

void mySignal( int sig ){
int status;
pid_t childPid = wait( &status ) ;


if( WIFEXITED( status ) ){
printf("The child is terminated success!!\n");
}

if( WIFSIGNALED( status ) ){
int termsig = WTERMSIG( status ) ;
printf("termsig = %d %d\n",status, termsig ) ;
}
check = false ;
}

信号并不总是结束程序,这使得你的条件毫无意义。

关于c++ - 如何捕获父进程中的Term操作信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26277685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com