gpt4 book ai didi

c - 如何避免过早杀死子进程?

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:33 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>

#define MAX_PIDS 28

volatile pid_t *pids;

void kPid(int x)
{
int c;
for (c=0; c<10; c++) {

if (pids[c] == x)
{
int status = 0;
pids[c] = wait(&status);
}
else {
continue;
}
}
}



int main(int argc, char **argv)
{
int c;
pid_t pid;
pids = mmap(0, MAX_PIDS*sizeof(pid_t), PROT_READ|PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0);

memset((void *)pids, 0, MAX_PIDS*sizeof(pid_t));
for (c=0; c<10; c++) {
pid = fork();
if (pid == 0) {
exit(1);
} else if (pid < 0) {
perror("fork failed");
} else {
pids[c] = pid;
}
}

int t;
char test[50];
snprintf(test,sizeof(test),"ps -ef | grep defunct",pids[c]);
system(test);
printf("Kill child: ");
scanf("%d",&t);
kPid(t);
system(test);
exit(0);
}

现在当我使用命令时:snprintf(test,sizeof(test),"ps -ef | grep defunct",pids[c]);

显示进程已失效,如何避免?我知道“退出(1);”终止进程,但我可以用什么代替这个?我希望以后能够终止进程

最佳答案

避免死进程的最简单方法是忽略 SIGCHLD:

signal(SIGCHLD, SIG_IGN);

否则,使用 waitpid() 等待子进程终止。这主要取决于,如果您想知道 child 何时终止以及其退出代码是什么。如果您不需要该信息,请使用信号方法

关于c - 如何避免过早杀死子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34276092/

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