【发布时间】:2015-12-14 20:33:44
【问题描述】:
#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);”杀死这个过程,但我可以用什么代替这个? 我希望以后能够终止该进程
【问题讨论】:
-
你问的是如何让孩子们不死,或者如何让他们死后不死?
-
“我希望以后能够终止进程”当然似乎表明他希望孩子们不要死,但他在(第一个,到目前为止)答案上的 cmets 对此表示怀疑。
标签: c process child-process