用一段代码来解释:
child_pid = fork();
if(child_pid > 0) //fork如果返回>0就是父进程所到位置{
wait(&status);//wait自动等待是否当前进程的某个子进程已经退出(如果没有子进程,返回-1同时errno被置为ECHILD,否则返回子进程PID),如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程退出或者僵尸,wait就会一直阻塞在这里,直到有一个出现为止。
if(WIFEXITED(status) == 0)
{//如果子进程正常退出,返回一个非零值。
return 0;
}
if (st == 1)
{
//正常退出
return 1;
else if (st == 9)
return 1;
else
return 0;
}else if(child_pid == 0){ //fork如果返回=0就是子进程所到位置
execl("/usr/local/bin/myfun", "myfun", pstr, NULL);//执行一个程序或者系统命令:/usr/local/bin/myfun。带入的第一个参数就是执行文件文件名,在执行文件的main函数解析参数的时候argv[0] 就是他了,因此第一个参数是固定的(正常习惯是这样的)。pstr第二个参数。int execl(const char *path, const char *arg, ...,NULL);原型。错误返回-1.
_exit(1);到这里的话,说明正常退出。
}