所需头文件 | #include <sys/types.h> // 提供类型pid_t的定义 #include <unistd.h> |
函数原型 | pid_t fork(void) |
函数返回值 | 0:子进程 |
子进程ID(大于0的整数):父进程 | |
-1:出错 |
小知识 | 由于fork()完整地复制了父进程的整个地址空间,因此执行速度是比较慢的。为了加快fork()的执行速度,有些UNIX系统设计者创建了vfork()。vfork()也能创建新进程,但它不产生父进程的副本。它是通过允许父子进程可访问相同物理内存从而伪装了对进程地址空间的真实拷贝,当子进程需要改变内存中数据时才复制父进程。这就是著名的“写操作时复制”(copy-on-write)技术。 现在很多嵌入式Linux系统的fork()函数调用都采用vfork()函数的实现方式,实际上uClinux所有的多进程管理都通过vfork()来实现。 |
所需头文件 | #include <unistd.h> |
函数原型 | int execl(const char *path, const char *arg, ...) |
int execv(const char *path, char *const argv[]) | |
int execle(const char *path, const char *arg, ..., char *const envp[]) | |
int execve(const char *path, char *const argv[], char *const envp[]) | |
int execlp(const char *file, const char *arg, ...) | |
int execvp(const char *file, char *const argv[]) | |
函数返回值 | -1:出错 |
前4位 | 统一为:exec | |
第5位 | l:参数传递为逐个列举方式 | execl、execle、execlp |
v:参数传递为构造指针数组方式 | execv、execve、execvp | |
第6位 | e:可传递新进程环境变量 | execle、execve |
p:可执行文件查找方式为文件名 | execlp、execvp |
小知识 | 事实上,这6个函数中真正的系统调用只有execve(),其他5个都是库函数,它们最终都会调用execve()这个系统调用。 |
所需头文件 | exit:#include <stdlib.h> |
_exit:#include <unistd.h> | |
函数原型 | exit:void exit(int status) |
_exit:void _exit(int status) | |
函数传入值 | status是一个整型的参数,可以利用这个参数传递进程结束时的状态。一般来说,0表示正常结束;其他的数值表示出现了错误,进程非正常结束。 在实际编程时,可以用wait()系统调用接收子进程的返回值,从而针对不同的情况进行不同的处理 |
小知识 | 在一个进程调用了exit()之后,该进程并不会立刻完全消失,而是留下一个称为僵尸进程(Zombie)的数据结构。僵尸进程是一种非常特殊的进程,它已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。 |
所需头文件 | #include <sys/types.h> #include <sys/wait.h> |
函数原型 | pid_t wait(int *status) |
函数传入值 | 这里的status是一个整型指针,是该子进程退出时的状态 · status若不为空,则通过它可以获得子进程的结束状态 另外,子进程的结束状态可由Linux中一些特定的宏来测定 |
函数返回值 | 成功:已结束运行的子进程的进程号 失败:-1 |
所需头文件 | #include <sys/types.h> #include <sys/wait.h> |
函数原型 | pid_t waitpid(pid_t pid, int *status, int options) |
函数传入值 | Pid | pid > 0:只等待进程ID等于pid的子进程,不管已经有其他子进程运行结束退出了,只要指定的子进程还没有结束,waitpid()就会一直等下去 | ||
pid = -1:等待任何一个子进程退出,此时和wait()作用一样 | ||||
pid = 0:等待其组ID等于调用进程的组ID的任一子进程 | ||||
pid < -1:等待其组ID等于pid的绝对值的任一子进程 | ||||
status | 同wait() | |||
options | WNOHANG:若由pid指定的子进程不立即可用,则waitpid()不阻塞,此时返回值为0 | |||
WUNTRACED:若实现某支持作业控制,则由pid指定的任一子进程状态已暂停,且其状态自暂停以来还未报告过,则返回其状态 | ||||
0:同wait(),阻塞父进程,等待子进程退出 | ||||
函数返回值 | 正常:已经结束运行的子进程的进程号 | |||
使用选项WNOHANG且没有子进程退出:0 | ||||
调用出错:-1 |
欢迎光临 DIY编程器网 (http://diybcq.com./) | Powered by Discuz! X3.2 |