了解子代程序在此代码中的执行方式
问题描述:
我被授予该项目的启动代码,但难以理解子程序如何执行。了解子代程序在此代码中的执行方式
int pid ;
int child_info = -1;
if (argv[0] == NULL) /* nothing succeeds */
return 0;
if((pid= fork()==-1)
perror("fork");
else if (pid == 0){
signal(SIGINT, SIG_DFL);
signal(SIGQUIT, SIG_DFL);
execvp(argv[0], argv);
perror("cannot execute command");
exit(1);
}
else { //check if wait error or print out exit status
if (wait(&child_info) == -1)
perror("wait");
else {
printf("Exit status: %d, %d\n", child_info>>8, child_info&0377);
}
}
return child_info;
}
看代码,当前进程叉,在这种情况下,孩子都继承父进程的相关性,因为不涉及定时器,信号或任何东西。但是,新进程的pid值在18000范围内,所以如何执行execvp(argv[0], argv)
,因为在这种情况下,pid!= 0.
答
只有一个新的过程被创建;孩子。
fork()
在子进程中返回0
,这就是你要检查的内容。
fork()
在父进程(您的原始进程)中返回子进程的PID。
通过检查fork()
对0
的回报,你知道你是父母还是孩子;如果是0
,那么你就是这个孩子。
答
Fork返回子进程的父进程和0子进程。所以当询问pid == 0
意味着“这是孩子的过程?”。如果是这样,它会执行通过命令行参数传递的程序。
我不明白你的问题...... – 2011-04-22 02:20:14