Unix环境高级编程学习笔记(五):进程控制

 

1 getpid函数,getppid函数,得到进程id,得到父进程id

#include<unistd.h>

pid_t getpid(void)

pid_t getppid(void)

uid_t getuid(void)得到实际用户id

uid_t geteuid(void)得到有效用户id

gid_t getgid(void)得到实际组id

gid_t getegid(void)得到有效组id

 

 

2 fork函数,当前进程创建新进程

#include<unistd.h>

pid_t fork(void)

 

子进程中返回0,父进程中返回子进程id,出错返回-1

 

当父进程比子进程先终止时,子进程的父进程转化为init进程,保证每个进程都有父进程,

当子进程比父进程先终止的时候,内核为每个终止进程保留了一些信息,父进程可以调用waitwaitpid函数取得这些信息,

如果一个进程已经终止,但是父进程未对其进行善后处理(获取有关信息,释放占有资源),这样的进程称为僵死进程

当一个子进程变为init进程的子进程时,当其终止时,init进程会立刻调用wait,防止其变为僵死进程

 

当子进程终止(正常或异常)时,内核会给父进程发送SIGCHLD信号,默认选项是忽略这个信号

 

5 wait函数

#include<sys/wait.h>

pid_t wait(int *statloc)

pid_t waitpid(pid_t pid, int * statlic, int options)

 


 

6 exec函数,从main函数开始重新执行新程序

#include<unistd.h>

execl取路径名和参数

execlp在PATH中搜索可执行文件,

execle使用新环境列表

execv取参数列表

 

 

7 system函数,非常方便地执行一些操作

#include<stdlib.h>

int system(char* cmdstring);

 

system的原理是调用fork,在子进程中exec一个shell并把cmdstring传进去,主进程调用waitpid对子进程进行善后处理

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。