进程控制
来源:互联网 发布:dokuwiki windows安装 编辑:程序博客网 时间:2024/06/05 18:20
1、进程标识
#include <unistd.h>pid_t getpid(void); //返回值:调用进程的进程IDpid_t getppid(void); //返回值:调用进程的父进程ID
2、进程等待
#include <sys/wait.h>pid_t wait(int *staloc);
功能:阻塞该进程,直到某个子进程退出
3、进程创建
#include <uinstd.h>pid_t fork(void);
功能:创建子进程
fork被调用一次,返回两次,有如下三种不同的返回值。
在父进程中:fork返回新创建的子进程的PID;
在子进程中:fork返回0;
若出错,fork返回-1.
子进程和父进程继续执行fork调用以后的指令。子进程是父进程的读本。例如,子进程获得父进程的的数据空间、堆和栈的副本。注意,这是子进程自己本身所拥有的副本。父进程和子进程并不同享这些存储空间部分。父进程和子进程共享正文段。
#include <unistd.h>pid_t vfork(void);
功能:创建子进程
demo:
#include <apue.h>#include <unistd.h>int main(int argc, char *argv[]){ pid_t pid = fork(); if (pid < 0){ err_sys("fork error!"); exit(1); } else if (pid == 0){ printf("child process ID = %d\n", getpid()); } else { wait(NULL);//等待子进退出 printf("parent process ID = %d\n", getppid()); } return 0;
fork 和 vfork 的区别:
(1)、fork:子进程拷贝父进程的数据段
vfork:子进程与父进程共享数据段
(2)、fork:父、子进程的执行次序不确定
vfork:子进程先运行,父进程后运行
展示二者区别的demo:
#include <apue.h>#include <unistd.h>int main(int argc, const char *argv[]){ int counter = 0; fork(); counter++; printf("counter = %d\n", counter); return 0;}
输出结果:
counter = 1counter = 1
#include <unistd.h>int main(int argc, const char *argv[]){ int counter = 0; vfork(); counter++; printf("counter = %d\n", counter); return 0;}
输出结果:
counter = 1counter = 2
4、exec函数族
#include <unistd.h>int execl(const char *pathname, const char *arg0, ... ,const char *argn, (char *)0);int execv(const char *pathbame, char *const argv[]);int execlp(const char *filename, const char *arg0, ... ,const char *argn, (char *)0);int execvp(const char *filename, char *const argv[]);
demo
#include <apue.h>#include <unistd.h>int main(int argc, const char *argv[]){ execl("/bin/ls", "ls", "-al", "/etc/passwd", (char *)0); return 0;}
#include <apue.h>#include <unistd.h>int main(int argc, char *argv[]){ char *arg[] = {"ls", "-al", "/etc/passwd", (char *)0}; execv("/bin/ls", arg); return 0;}
阅读全文
0 0
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制
- 进程控制 .
- 进程控制
- 创建第一个GO语言hello Word
- 欢迎使用CSDN-markdown编辑器
- 微信小程序开发display:flex属性的学习
- 求二叉树叶子节点的个数/求二叉树第k层的节点个数。
- mediator
- 进程控制
- servlet 常见中文乱码类型及其解决方法
- How Many Answers Are Wrong HDU
- SSM基于注解配置Spring4.1.6、springMVC4.1.6、mybatis3.2.8的maven框架搭建
- 描述符(Property的原理)
- oracle新接触的sql语句
- Debian打包学习记录
- 暑期集训之开门人和关门人
- 【Hadoop 学习】之 安装配置Hadoop