您的位置:首页 > 编程语言

高级编程之进程(三)

2016-01-22 14:06 232 查看
进 程 的 使 用

1、多进程逻辑处理

2、exec函数族启动其他进程

3、制作守护进程

exec函数族

1、 l ==>列表 v ==》数组/容器

原型:int execl(const char *path, const char *arg, ...);

功能:通过该函数可以将指定的path路径下程序名称为arg的

程序启动起来。

参数: path 要启动的程序的路径+文件名称

arg 要启动的程序名称

... 可变长参数 ===》l 生效的地方,当前启动程序的参数

都是以列表传参数的形式调用函数,参数最后

以NULL结尾。

返回值:

成功 0

失败 -1

原型:int execv(const char *path, char *const argv[]);

功能:同execl类似都是启动程序用。

参数: path 要启动的程序路径+文件名称

argv 要启动的程序的参数对应的字符数组。

该数组是启动程序的参数列表。

返回值:成功 0

失败 -1;

原型:int execlp(const char *file, const char *arg, ...);

功能:该函数可以在PATH环境变量指定的范围内查找程序名称为

file 的程序并启动执行。

参数:file 要启动的程序的名称

arg 要启动的程序的第0个参数,一般是程序名称。

...可变长参数,表示程序启动的其他参数。

返回值:成功 0

失败 -1;

原型:int execvp(const char *file, char *const argv[]);

原型:int system(char *cmd)

功能:在当前进程中自动fork一个子进程并执行cmd命令。

参数:cmd 要执行的shell命令

返回值:成功 0

失败 -1;

练习:

尝试用以上几种不同的启动程序方式,实现KILL命令的效果。

扩展:如何能在一个进程中杀死多个指定的进程。

再扩展: 如何实现一个自己的命令行终端。

守护进程的制作:

1、孤儿进程

2、会话组长

pid_t setsid(void);

功能:将该代码执行的进程修改为会话组长。

3、工作目录

chdir(char * path);

功能:将当前进程的工作目录修改为指定的path路径。

以避免守护进程所在工作目录被卸载。

4、权限掩码

mode_t umask(mode_t mask);

功能:修改当前程序的权限掩码,方式守护进程由于

权限不够导致异常。

5、文件描述符

close() ===> getdtablesize()

int getdtablesize(void);

功能:获取当前进程中已经打开的最大文件描述符。

守护进程的验证:

1、ps -ef ===>父进程pid =1

2、ps -ef tty列 应该是?

3、ps aux stat列 应该有s,表示会话组长。

一般会把守护进程的创建写一个独立的函数:

练习:

设计一个守护进程,每隔一秒向同名日志文件中

写入一行不重复的语句。

设计一个守护进程,每隔10分钟判断 xxx.db 的是否

有变化,有变化则备份到其他路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: