1.写多进程,一个父进程,两个子进程,一个运行ls –l, 另一个暂停5s,父进程先阻塞等待第一个子进程的结束,然后用非阻塞等另一个进程退出,收集到第二个子进程结束的信息,父进程就返回。
2016-08-09 20:49
791 查看
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main()
{
pid_t child1, child2, father;
//child2=fork();
child1=fork();
if(child1 < 0)
{
printf("child1 is error\n");
exit(1);
}
else if(child1 == 0)
{
printf("child1 execute ls-l\n");
execlp("/bin/ls","ls","-l","/home/zzd/class",(char *)NULL);
exit(0);
}
else
{
child2=fork(); //第2个fork一定要写在这,也就是父进程里面创建一个子进程。放在前面child1会运行2次,也就是实际上变成了4个进程。
if(child2 < 0)
{
printf("child2 is error\n");
exit(0);
}
else if(child2 == 0)
{
printf("child2 sleep for 5 seconds\n");
sleep(5);
exit(0);
}
//wait(NULL);
father=waitpid(child1,NULL,0);
if(father=child1)
printf("child1 success\n");
else
printf("error");
do
{
father=waitpid(child2,NULL,WNOHANG);
}while(father==0);
if(father=child2)
printf("child2 success\n");
}
return 0;
}
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main()
{
pid_t child1, child2, father;
//child2=fork();
child1=fork();
if(child1 < 0)
{
printf("child1 is error\n");
exit(1);
}
else if(child1 == 0)
{
printf("child1 execute ls-l\n");
execlp("/bin/ls","ls","-l","/home/zzd/class",(char *)NULL);
exit(0);
}
else
{
child2=fork(); //第2个fork一定要写在这,也就是父进程里面创建一个子进程。放在前面child1会运行2次,也就是实际上变成了4个进程。
if(child2 < 0)
{
printf("child2 is error\n");
exit(0);
}
else if(child2 == 0)
{
printf("child2 sleep for 5 seconds\n");
sleep(5);
exit(0);
}
//wait(NULL);
father=waitpid(child1,NULL,0);
if(father=child1)
printf("child1 success\n");
else
printf("error");
do
{
father=waitpid(child2,NULL,WNOHANG);
}while(father==0);
if(father=child2)
printf("child2 success\n");
}
return 0;
}
相关文章推荐
- C程序完成:父进程创建一个子进程,父进程对子进程设置一个报警信号,然后父进程等待子进程的结束,如果此时报警信号先到,就终止子进程。
- 创建守护进程:先建立守护进程,在守护进程建立一个子进程,该子进程暂停10s,然后退出,并由该守护进程收集子进程退出的消息。子进程,守护进程的退出消息都在/var/log/message中输出,子进程退
- 我在delphi中用shellExecute启动了一个程序(ftp);然后想做一个等待,只到ftp进程结束,再继续下面的操作,请问如何监控这个进程是否已结束?
- 用进程相关API函数编程一个程序,使之产生一个进程扇,父进程产生一系列子进程,每个子进程打印自己的PID然后退出。要求父进程最后打印PID
- JAVA调用系统命令或可执行程序--返回一个Runtime运行时对象,然后启动另外一个进程来执行命令
- 编写一个程序,使用fork函数来创建一个子进程,并且说明父进程和子进程的随机返回问题
- shell同时启多个进程,并等待所有子进程结束,再做接下来的操作,最好能获取每个子进程的退出状态
- 一个进程去结束另一个进程
- VC启动一个程序并等待运行结束
- vbs中实现启动两个应用程序,一直等到其中一个程序结束,然后关闭另一个?
- java中对线程的实现 等待多个子线程结束 多个子线程运行中进行同步
- linux 让父进程等待并检查子进程的退出状态
- Delphi写的等待进程运行结束函数
- 异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作.这种情况通常会影响到
- 如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)
- 多个子线程并发执行,主线程等待所有子线程都结束后再继续运行
- linux下当进程运行出现错误退出对错误信息分析
- 不能两次使用waitpid等待一个子进程的结束
- 如何让Delphi调用外部程序并等待其运行信息(如结束)
- Linux下父进程通过管道发送文件名给子进程,子进程获取文件名后首先判断文件是否存在,不存在,通过管道返回错误信息,存在,将文件内容返回给父进程