进程控制

1.获取ID
#include <sys/types.h>
#include <unistd.h>

pid_t getpid(void) //获取本进程ID
pid_t getppid(void) //获取本进程的父进程ID
2.用fork创建进程
#include <unistd.h>
pid_t fork(void)

fork每被调用一次都返回两次,它有三种可能的返回值:
在父进程中,fork返回新创建的子进程的PID;
在子进程中,fork返回0;
如果出错,fork返回一个负值。
用fork创建进程,子进程和父进程共享代码段,但子进程的数据空间、堆栈空间都会从父进程得到一个拷贝,不是共享。
3.用vfork创建进程
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void)

vfork和fork的区别:
fork创建的子进程拷贝父进程的数据段,而vfork创建的子进程与父进程共享数据段;
fork创建进程后父、子进程的执行次序不确定,而vfork创建进程后子进程先运行,父进程后运行。
4.exec函数族
exec用被执行的程序替换调用它的程序。
exec与fork的区别在于:fork创建一个新进程,产生一个新的PID;而exec启动一个新进程,替换原有的进程,因此进程的PID不会改变。
#include <unistd.h>
int execl(const char *path, const char *arg1,...)

参数说明:
path:被执行的程序名(含完整路径)
arg1—argn:被执行程序所需的命令行参数,含程序名。以空指针(NULL)结束。
#include <unistd.h>
int execlp(const char *path, const char *arg1,...)

参数说明:
path:被执行的程序名(不含路径,将从path环境变量中查找该程序)
arg1—argn:被执行程序所需的命令行参数,含程序名。以空指针(NULL)结束。
#include <unistd.h>
int execv(const char *path, char *const argv[])

参数说明:
path:被执行的程序名(含完整路径)
argv[]:被执行程序所需的命令行参数数组。
#include <stdlib.h>
int system(const char *string)

功能:调用fork产生子进程,由子进程调用 /bin/sh -c string 来执行参数string所代表的命令。
5.进程等待
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)

功能:阻塞该进程,直到其某个子进程退出。

posted @ 2010-07-15 18:27  MikeLin  阅读(220)  评论(0编辑  收藏  举报