exec
函数族的用法。Ubantu或Centos
使用execv()
函数调用用户程序,更改子进程的功能。
使用循环创建多个子进程,使用wait()函数完成所有子进程的回收工作。
熟练使用进程管理命令管理与查看进程信息。
需练习的进程管理命令有:ps
、top
、pstree
、pgrep
、nice
、bg
、fg
、jobs
、kill
。
fork()
函数用于创建进程,该函数的原型如下:
pid_t fork(void);
函数调用成功后,
fork()
函数返回子进程的pid
,fork()
函数返回0
;函数调用失败则返回-1
。
execl()
execl()
函数的原型如下:int execl(const char *path, const char *arg, ...);
execlp()
execlp()
函数的原型如下:int execlp(const char *file, const char *arg, ...);
execle()
execle()
函数的原型如下:int execle(const char *path, const char *arg, ..., char * const envp[]);
execv()
execv()
函数的原型如下:int execv(const char *path, char *const argv[]);
execvp()
execvp()
函数的原型如下:int execvp(const char *file, char *const argv[]);
execve()
execve()
函数的原型如下:int execve(const char *path, char *const argv[], char *const envp[]);
进程同步中用到的函数有wait()
和waitpid()
。
wait()
函数wait()
函数的原型如下:
pid_t wait(int *status);
wait()
的功能是阻塞等待子进程终止,回收子进程资源,调用wait()
函数的进程会被挂起,进入阻塞状态,直到它的某个子进程变为僵尸态。
wait()
函数中的参数status
可以为NULL
,当其不为NULL
时,参数status
将用于获取回收子进程的退出状态。
退出状态存放在参数status
的低8位中,可通过Linux
系统中提供的一组宏函数来获取,其中最常用的宏函数有WIFEXITED()
和WEXITSTATUS()
,它们的参数与wait()
函数相同,都是一个整型的status
。
宏函数的功能分别如下:
WIFEXITED(status)
:用于判断子程序是否正常退出,若是,返回非零值;否则返回0。WEXITSTATUS(status)
:WEXITSTATUS()
通常与WIFEXITED()
结合使用,若WIFEXITED
返回非零值,即正常退出时,使用该宏可以提取出子进程的返回值。waitpid()
函数的原型如下:
pid_t waitpid(pid_t pid,int *status,int options);
waitpid()
也可回收子进程资源,但可通过传递不同参数,设置waitpid()
函数回收子进程的方式,以及回收子进程的范围。
参数pid
一般是进程的pid
,但也会有其它取值。
参数pid
的取值及其意义分别如下:
pid>0
时,只等待pid
与该参数相同的子进程;pid=-1
时,waitpid()
函数与wait()
函数作用相同,将阻塞等待并回收一个子进程;pid=0
时,等待同一个进程组的所有子进程;pid<-1
时,等待指定进程组中的任何子进程,进程组的id
等于pid
的绝对值。参数options
提供控制waitpid()
的选项,该选项是一个常量,或由|
连接的两个常量。该选项支持的选项如下:
WNOHANG
,即使子进程没有终止,waitpid()
也会立即返回;WUNTRACED
,如果子进程暂停执行,则waitpid()
立刻返回;0
。waitpid()
函数的返回值会出现3种情况:
waitpid()
返回捕捉到的子进程的pid
;options
的值为WNOHANG
,但调用waitpid()
时发现没有已退出的子进程可收集,则返回0
;-1
。errno
会被设置成相应的值以指示错误位置。BSD
风格的常用选项:a/u/x/e/f
SysV
风格的常用选项:-a/-e/-f/-o/-l
top
命令常用热键:l/t/m/M/P/T/r/i/k
l/t/m
——控制top前几行信息的显示top
——在终端启动top命令M
——根据常驻内存集的大小为进程排序P
——根据%CPU为进程排序T
——根据TIME+为进程排序i
——忽略闲置和僵死的进程k
——终止一个进程pstree
命令常用选项:-a/-c/-h/-u/-n
pstree –h //列出树状图
pgrep
命令常用选项:-o/-n/-p/-t/-u
pgrep –o itcast //根据用户名itcast查找进程,仅显示pid最小的进程
pgrep –n root //根据用户名root查找进程,仅显示pid最大的进程
nice –n 5 bash //更改bash 的优先级
nice –n 6 top //启动top进程后,更改top进程优先级、
top & //在后台启动top命令
top //在前台启动top命令
Ctrl+Z //将top送往后台
jobs //查看当前终端后台运行的进程
fg 1 //将作业编号为1的top进程调回前台
ps //查看终端运行的进程
kill -9 5825 //杀死进程pid为5825的进程
代码注意头文件导入,顺便说一句VIM真香。