【多进程】程序设计
来源:互联网 发布:跨界歌王 巫启贤 知乎 编辑:程序博客网 时间:2024/05/16 06:02
1、获取进程ID:getpid
1)函数原型
pid_t getpid(void);
2)所属头文件
#include <sys/types.h>
#include <unistd.h>
3)返回值
一般成功: 返回调用该进程的id.
4)参数说明
无参数
#include <sys/types.h>#include <unistd.h>#include <stdio.h>void main(){int id;id = getpid();printf("Process id is %d.\n", id);}输出:[root@localhost multi-process]# ./getpid Process id is 3557.
2.0、创建进程: fork, 独立数据段和堆栈段
1)函数原型
pid_t fork(void); //创建一个子进程, 复制父进程余下的程序, 父/子进程执行顺序不定
2)所属头文件
#include <unistd.h>
3)返回值
成功: 在父进程中返回子进程的pid
在在进程中返回0.
失败: -1
4)参数说明
无参数
#include <stdio.h>#include <unistd.h>void main(){pid_t pid = 0;pid = fork();if (pid > 0){printf("I love linux: %d\n", pid);}else{printf("I am fork's child\n");}exit(0); //End of process.}输出:[root@localhost multi-process]# ./myfork I love linux: 3582I am fork's child
2.1、创建进程: vfork, 共享父进程的数据段和堆栈段.
1)函数原型
pid_t vfork(void); //创建子进程并阻塞父进程, 即子进程先运行.
2)所属头文件
#include <sys/types.h>
#include <unistd.h>
3)返回值
成功: 在父进程中返回子进程的pid
在子进程中返回0
失败: -1
4)参数说明
无参数
#include <stdio.h>#include <sys/types.h>#include <unistd.h>void main(){pid_t pid = 0;pid = vfork();if (pid > 0){printf("I love linux: %d\n", pid);}else{printf("I am fork's child\n");}exit(0); //End of process.}输出:[root@localhost multi-process]# ./myvfork I am fork's childI love linux: 3625
3、退出进程: exit
1)函数原型
void exit(int status);
2)所属头文件
#include <stdlib.h>
3)返回值
无返回值.
4)参数说明
status: 返回给父进程 status & 0377, 退出状态码
4、进程等待: wait
1)函数原型
pid_t wait(int *status);
2)所属头文件
#include <sys/types.h>
#include <sys/wait.h>
3)返回值
成功: 返回终止的子进程ID
失败: -1
4)参数说明
status: 记录子进程的退出状态
#include <sys/types.h>#include <sys/wait.h>#include <unistd.h>#include <stdlib.h>void main(){pid_t pid;pid = fork();if (pid > 0){wait(NULL);puts("I am father process.\n");exit(0);}else{puts("I am child. Ha Ha ~~\n");exit(0);}}输出:[root@localhost multi-process]# ./mywait I am child. Ha Ha ~~I am father process.
5、执行进程: exec
1)函数原型
int execl(const char *path, const char *arg, ...);
2)所属头文件
#include <unistd.h>
3)返回值
成功: 无
失败: 有
4)参数说明
arg: path指向的进程需要的函数(可以有多个), 以NULL结束.
#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include <stdlib.h>void main(){pid_t pid = 0;pid = fork();if (pid > 0){puts("Father: Hello Linux. \n");wait(NULL);exit(0);}else{execl("./getpid", NULL);/* 当执行了execl()之后, 余下的代码将不会被执行 */puts("Child: Goodbye Linux. \n");exit(0);}} 输出:[root@localhost multi-process]# ./myexec Father: Hello Linux. Process id is 3695.
* 注: 这里需要注意的是, 当执行了execl之后, 余下的代码将不会被执行.
# exec和fork的区别:
fork: 创建一个新的进程, 产生一个新的pid.
exec: 保留原有的进程, 执行新的代码.(余下代码不执行 ! )
- 多进程服务程序设计
- 多进程程序设计
- Linux多进程程序设计
- Linux多进程程序设计
- 【多进程】程序设计
- 07-多进程程序设计
- 2-12 多进程程序设计
- 程序设计—多进程还是多线程
- 关于 程序设计—多进程还是多线程
- linux应用开发-多进程程序设计
- Linux_4.2_多进程程序设计
- Linux编程——多进程程序设计
- 多进程程序设计(进程的创建与结束)
- 多进程程序设计(进程的创建与结束)
- 多进程程序设计(进程的创建与结束)
- linux守护进程程序设计
- Linux程序设计--进程
- 多进程程序设计的方法思考及相关工具
- Scala: 简介和安装
- STL和CUDA thrust
- HDU2052 大水题 做图片相框
- HDU2053 开关灯 水题
- R tutorial 11 - Scatterplots 散点圖
- 【多进程】程序设计
- HDU2054 有点坑的大数比较
- C语言实验——两个数最大
- HDU2055 字符与数字的加法
- 【Java多线程与并发库】10.java5的线程锁(读写锁)技术
- 写一个 android launcher界面
- 欢迎使用CSDN-markdown编辑器
- kmp算法
- hdu 2181 哈密顿绕行世界问题 dfs