linux下fork函数创建进程
2014-01-01 11:51
417 查看
linux下fork函数创建进程
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<unistd.h> #include<sys/wait.h> int main() { pid_t child1,child2,child; /*创建两个子进程*/ child1=fork(); //child2=fork(); /*子进程1的出错处理*/ if(child1==-1) { printf("Child1 fork error\n"); exit(1); /*异常退出*/ } /*在子进程1中调用execlp()函数*/ if(child1!=0) { child2=fork(); if(child2==-1) { printf("Child2 fork error\n"); exit(1); /*异常退出*/ } /*在子进程2中使其暂停5s*/ else if(child2==0) { printf("I am child2.I will sleep for 5 seconds!\n"); sleep(5); printf("I am child2.I have awaked and I will exit!\n"); exit(0); /*正常退出*/ } /*在父进程中等待两个子进程的退出*/ else { printf("I am father progress\n"); child=waitpid(child1,NULL,0);/*阻塞式等待*/ if(child==child1) { printf("I am father progress.I get child1 exit code:%d\n",child); } else { printf("Error occured!\n"); } do { child=waitpid(child2,NULL,WNOHANG);/*非阻塞式等待*/ if(child==0) { printf("I am father progress.The child2 progress has not exited!\n"); sleep(1); } }while(child==0); if(child==child2) { printf("I am father progress.I get child2 exit code:%d\n",child); } else { printf("Erroe occured!\n"); } } } else if(child1==0) { printf("I am child1 and I execute 'ls -l'\n"); if(execlp("ls","ls","-l",NULL)<0) { printf("Child1 execlp error\n"); } } /*子进程2的出错处理*/ exit(0); }运行结果:
相关文章推荐
- Linux下进程创建Fork()函数分析
- 简单掌握Linux系统中fork()函数创建子进程的用法
- Linux进程的创建函数fork()及其fork内核实现解析
- [Linux进程]使用fork函数创建进程
- Linux 内核--fork()函数创建进程
- Linux 内核--fork()函数创建进程
- Linux 内核--fork()函数创建进程 (续)之copy_mem(int nr, struct task_struct *p)
- Linux下C编程,子进程创建函数fork() 执行解析
- Linux 内核--fork()函数创建进程 (续)之copy_mem(int nr, struct task_struct *p)
- Linux 内核--fork()函数创建进程
- Linux0.11内核--fork()函数创建进程
- Linux进程的创建函数fork()及其fork内核实现解析【转】
- Linux基础学习系列:对于fork()函数的学习,及进程创建相关知识
- Linux 内核--fork()函数创建进程
- [Linux进程]使用fork函数创建多个子进程
- Linux0.11内核--fork()函数创建进程
- Linux基础学习系列:对于fork()函数的学习,及进程创建相关知识
- Linux 内核--fork()函数创建进程
- LInux 子进程创建函数fork简介
- Linux进程创建fork()函数