从C中的父进程获取子值(退出代码)
我想知道是否有办法进入while语句(从C中的父进程获取子值(退出代码),c,C,我想知道是否有办法进入while语句(printf(“孩子的死亡:%d,退出代码为%d\n”,I,WEXITSTATUS(status));)子对象的整数I 我正在从execlp获取输出(该程序内部有一个超时,返回一个随机数),但我想获取每个返回响应的标识I int main (int argc, char *argv[]) { int i; int pid; int status; int pro= atoi (argv[argc - 1]); char programNa
printf(“孩子的死亡:%d,退出代码为%d\n”,I,WEXITSTATUS(status));
)子对象的整数I
我正在从execlp
获取输出(该程序内部有一个超时,返回一个随机数),但我想获取每个返回响应的标识I
int main (int argc, char *argv[])
{
int i;
int pid;
int status;
int pro= atoi (argv[argc - 1]);
char programName[] = "./child";
if (argc < 2 || argc > 2){
printf("Only one argument is allowed\n");
exit (0);
}
for (i = 0; i < pro; i++)
{
pid = fork();
if(pid == 0)
{
printf("Created child %d with pid=%d\n",i, getpid());
char child[10];
snprintf(child, 10, "%d", i);
if (execlp(programName, programName, child, NULL) < 0){
printf("Error running: %s\n",programName);
}
exit(2);
}
}
while(wait(&status)>0)
{
if ( WIFEXITED(status) ){
printf("Death of child: %d with timeout %d\n",i, WEXITSTATUS(status));
if (WEXITSTATUS(status) > 5)
{
printf("Time exceeded\n");
}
}
}
exit (0);
}
intmain(intargc,char*argv[])
{
int i;
int-pid;
智力状态;
int-pro=atoi(argv[argc-1]);
char programName[]=“/子级”;
如果(argc<2 | | argc>2){
printf(“只允许一个参数\n”);
出口(0);
}
对于(i=0;i0)
{
如果(妻子退出(状态)){
printf(“子级死亡:%d,超时%d\n”,i,WEXITSTATUS(status));
如果(WEXITSTATUS(状态)>5)
{
printf(“超出时间\n”);
}
}
}
出口(0);
}
也许我的方法不正确。欢迎任何提示。我是c语言的新手
wait
将返回更改的进程的pid。要将其映射回i
,请将从fork
返回的所有PID保存到一个表中,并作为查找引用返回
pid_t table[pro] = {0};
pid_t child=0;
for (i = 0; i < pro; i++)
{
pid = fork();
if(pid == 0)
{
printf("Created child %d with pid=%d\n",i, getpid());
char child[10];
snprintf(child, 10, "%d", i);
if (execlp(programName, programName, child, NULL) < 0){
printf("Error running: %s\n",programName);
}
exit(2);
}
else
{
table[i] = pid;
}
}
while((child=wait(&status)) > 0)
{
if ( WIFEXITED(status) ){
i = -1;
for (int j = 0; j < pro; j++)
{
if (table[j] == child))
{
i = j;
break;
}
}
printf("Death of child: %d with timeout %d\n",i, WEXITSTATUS(status));
pid_t表[pro]={0};
pid_t child=0;
对于(i=0;i0)
{
如果(妻子退出(状态)){
i=-1;
对于(int j=0;j
可以进入另一个进程的内存,但几乎肯定不是您想要的,并且可能需要100多行代码。您在这里试图实现什么?您是否考虑过使用线程?这是否回答了您的问题?