多进程学习1
来源:互联网 发布:数据挖掘专业课程 编辑:程序博客网 时间:2024/05/19 14:39
下面是一个使用fork 并运行另外一个程序的例子:
main1 程序如下:
void main( void ) { pid_t child = fork(); if ( child == -1 ) // this is the child process { printf( "fork err.\n" );exit(EXIT_FAILURE); } else if ( child == 0 ) // this is the child process { sleep(2); printf( "in child process.\n" ); printf("\tchild pid = %d\n",getpid()); printf("\tchild ppid = %d\n",getppid()); execl( "/home/xa000xx/temp/test/main/main2", "main2", ( char * )NULL );printf("child process exit\n"); exit(EXIT_SUCCESS); } else {printf( "in parent process.\n" );printf("\tparent pid = %d\n",getpid()); printf("\tparent ppid = %d\n",getppid()); sleep(10);printf("parent process exit\n"); }exit(EXIT_SUCCESS); }
main2的code:
void main( void ) { char mine[128];int i= 5;while (i-- >0) {sleep(1);printf("this is in main2 progress! \n");}printf("main2 progress exit! \n");}
执行结果如下:
~/temp/test/main$ ./main1 in parent process. parent pid = 30987 parent ppid = 12596in child process. child pid = 30988 child ppid = 30987this is in main2 progress! this is in main2 progress! this is in main2 progress! this is in main2 progress! this is in main2 progress! main2 progress exit! parent process exit<a target=_blank href="mailto:xa000xx@xalnx6:~/temp/test/main$">xa000<span style="color:#000000;">xx</span>@xalnx6:~/temp/test/main$</a>
如何向main2传递参数呢?
修改下main1 部分code如下:
int errno = execl( "/home/xa00087/temp/test/main/main2", "main2", "test1", "test2", "test3",( char * )NULL );printf( "execl failed, error code: %d(%s)", errno, strerror( errno ) );printf("child process exit\n"); exit(EXIT_SUCCESS);
修改main2 如下:
void main(int argc,char *argv[]){ int i = 0;printf("argc = %d \n", argc);for (i=0; i<argc; i++) {printf("argv[%d]=%s \n", i, argv[i]);}char mine[128];i= 5;while (i-- >0) {sleep(1);printf("this is in main2 progress! \n");}printf("main2 progress exit! \n");}
运行结果:
in parent process. parent pid = 27782 parent ppid = 12596in child process. child pid = 27783 child ppid = 27782 main2 pid = 27783 main2 ppid = 27782argc = 4 argv[0]=main2 argv[1]=test1 argv[2]=test2 argv[3]=test3 this is in main2 progress! this is in main2 progress! this is in main2 progress! this is in main2 progress! this is in main2 progress! main2 progress exit! parent process exit
exec用被执行的程序完全替换了调用进程的映像。Fork创建了一个新进程就产生了一个新的PID,exec启动一个新程序,替换原有进程。因此被执行的进程的PID不会改变。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。
可以看到child process exit 并没有打印出来, 说明进程已经转到main2了, 在mian2中退出的。
main1中传入的参数再main2中会被打印出来。
0 0
- 多进程学习1
- unix/linux多进程编程学习日志1-进程环境
- 多进程编程学习笔记-1-进程基础
- 多进程编程学习
- 多进程学习(vfork)
- Linux 多进程学习
- 多进程学习2
- 多进程学习3
- php多进程学习
- python多进程学习
- Python3多进程学习
- Win32ASM-进程学习【1】
- linux 进程学习1
- 进程的学习1
- 进程学习(1)
- 进程学习1--atexit
- c 多线程,多进程 学习
- C++学习笔记--多进程
- frame在360浏览器兼容模式时显示白色
- ios 离线实现
- Linux下安装Nginx1.8.0
- 存储过程和存储函数
- 对#Hello,2015征文#+Android 热敏打印机打印二维码(图片)博客的尝试
- 多进程学习1
- HiveSql(1)mapjoin、分区表
- 数据库设计
- Android APK反编译实战
- spark中 进行高维矩阵的SVD分解(2)
- QT中的PRI文件
- Oracle EBS OM销售订单行状态“施实”处理方法
- Axure产品原型在手机上如何运行
- 全新Linux学习路线图及入门教程