进程编程
1、getpid
函数的作用:获取进程的识别码、进程号
函数的原型:pid_t getpid(void)
返回值:目前进程的进程号
头文件:#include
2、fork
函数的作用:创建一个进程
函数的原型:pid_t fork(void)
函数的返回值:< 0:出错;
= 0:表示当前创建的是子进程;
>0:表示当前创建的是父进程,返回值是子进程的进程号
3、vfork
函数的作用:创建一个新的进程
函数的原型:pid_t vfork();
特点:子进程先运行,退出,父进程才能进行;
4、execl
函数的作用:执行一个文件
函数的原型:int execl(const char*path,const char *arg,…)
参数说明:path:代表文件的路径
arg:表示argv[0] , argv[1]
最后一个参数以NULL结束
返回值:成功函数没有返回;
出错:-1;
5、execlp
函数的作用: execl()用来执行参数path字符串所代表的目录中找到符合参数file的文件名,找到后便执行该文件,第二个参数是利用数组指针来传递给执行文件,最后一个参数需要以空指针(NULL)结束。
函数的原型 :int execlp(const char *file, const char *arg, ...);
返回值:函数执行成功时没有返回值,执行失败时的返回值为-1.
6、execle
函数的作用: execl是用来执行参数path字符串所代表的文件路径,并为新程序复制最后一个参数所指示的环境变量。接下来的参数代表执行该文件时传递过去的argv(0)、argv[1]……,最后一个参数必须用空指针(NULL)作结束
函数的原型:int execle(const char *path,const char *arg, ..., char * constenvp[]);
返回值:函数执行成功时没有返回值,执行失败时的返回值为-1
7、execv
函数的作用: execv()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组。
函数的原型: int execv(const char *path,char *const argv[]);
返回值:函数执行成功时没有返回值,执行失败时的返回值为-1.
8、execvp
函数的作用: execvp()用来执行参数path字符串所代表的目录中找到符合参数file的文件名,找到后便执行该文件,第二个参数是利用数组指针来传递给执行文件。
函数的原型: int execvp(const char *file, char *const argv[]);
返回值:函数执行成功时没有返回值,执行失败时的返回值为-1.
9、execve
函数的作用: execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。
函数的原型:int execve(const char *filename, char *const argv[ ], char *const envp[]);
返回值:函数执行成功时没有返回值,执行失败时的返回值为-1.
10、system
函数的作用:执行一个命令
函数的原型:int system(const char*string)
11、waitpid
函数的作用:等待退出,等待信号,或者指定的进程结束
函数的原型:pid_t waitpid(pid_t pid, int *status, int options)
函数的参数:pid < -1:等待进程pid绝对值得任何子进程
pid = -1:等待任何子进程,相当于wait
pid = 0 :等待进程组识别码与目前进程相同的任何子进程
pid > 0 :等待进程号为pid的子进程退出
options:
WNOHANG 如果没有子进程退出,马上返回不等待
WUNTRACED:如果子进程进入暂停执行状态,马上返回
返回值:如果执行成功,返回子进程
失败:-1
12、exit
函数的作用:正常结束程序
函数的原型:void exit(int status)
返回值:无
进程编程学习总结:
1、进程与程序的区别
(1)进程是动态的,程序是静态的
(2)进程是暂时的,程序是长久的
(3)进程与程序组成不同:进程的组成包括程序、数据和进程控制块
(4)进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;
通过调用关系,一个进程可包含多个程序;
2、什么是死锁?
多个进程因资源竞争而形成的一种僵局
3、创建一个进程有几种方法?
(1)调用fork()函数
(2)调用vfork()函数
4、fork()函数与vfork()函数有什么区别?
fork()函数创建的子进程将父进程的资源拷贝了一遍,父子进程把所有代码执行一遍
vfork()函数创建的子进程和父进程共享数据空间,不是重新拷贝
5、有哪几种函数可以返回子进程的进程号pid?
(1)fork()函数的返回值如果>0,那么即为子进程的进程号
(2)wait()函数成功返回值即为子进程的进程号
(3)waitpid()函数成功返回即为子进程的进程号