#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
pid_t pid1,pid2; //进程标识符
pid1 = fork(); //创建一个新的进程
if(pid1<0)
{
printf("创建进程失败!");
exit(1);
}
else if(pid1==0) //如果pid为0则表示当前执行的是子进程
{
printf("子进程1,我将调用exec函数,进程标识符是%d\n",getpid());
execl("/bin/ls","ls","-1","-color",NULL);
printf("exec failed!\n");
exit(1);
}
else //否则为父进程
{
pid2 = fork();//創建一個新的進
if(pid2<0)
{
printf("创建进程失败!");
exit(1);
}
else if(pid2==0) //如果pid为0则表示当前执行的是子进程
{
printf("进程2,我将调用exec函数,进程标识符是%d\n",getpid());
execl("/bin/ls","ls","-1","-color",NULL);
printf("exec failed!\n");
exit(1);
}
else //否则为父进程
{
wait(NULL);
printf("父进程,进程标识符是%d\n",getpid());
printf("完成!\n");
exit(0);
}
}
return 0;
}
运行结果:
分析:
可以看出在使用了exec()函数后程序使用了ls的命令,列出/bin/目录下的文件信息,执行完execl()函数后,子进程调用exit()函数,退出当前进程,而我们可以发现在使用wait()函数后,父进程永远将在其他的子进程完成之后才执行,所以在输出的结果中我们可以看到最后输出的将是父进程的信息。
实验四:利用Linux的信号