linux中如何获取其他进程的退出状态
进程的退出状态至关重要,用wait系列函数,父进程可以捕捉到子进程的退出状态,若给定任意进程,其父进程已经确定,无法改变,自己如何获取到其退出状态呢。
可以用ptrace系统api attach到相应的进程,然后执行wait就可以在进程退出的时候,捕获其退出状态,代码如下:
#include <unistd.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <errno.h>
int main(int argc, char *argv[])
{
pid_t pid;
printf("请输入进程号:\n");
scanf("%d", &pid);
printf("子进程暂停 2s\n");
ptrace(PTRACE_ATTACH, pid, NULL, NULL);
sleep(2);
printf("子进程继续执行 5s\n");
ptrace(PTRACE_CONT, pid, NULL, NULL);
int wstatus = 0;
int ret = waitpid(pid, &wstatus, 0);
if(ret < 0){
printf("waitpid failed, errno is %d, err msg is %s\n", errno, strerror(errno));
return ret;
}
if (WIFEXITED(wstatus)) {
int exit_status = WEXITSTATUS(wstatus);
printf("normal exit, status is %d\n", exit_status);
}
return 0;
}