高级编程之进程(三)
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 的是否
有变化,有变化则备份到其他路径。
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 的是否
有变化,有变化则备份到其他路径。
相关文章推荐
- C语言实现strcmp
- JAVA设计模式:组合模式
- 高级编程之进程(二)
- eclipse快捷键汇总
- 高通平台开机LOGO修改LK(bootloader)下实现
- C# 中 重载,重写,隐藏的区别
- java基础篇--01<基础>
- C++:抽象类(圆与正方形)
- 高级编程之进程(一)
- 高级编程之目录(二)
- java.lang.IllegalStateException: ScrollView can host only one direct child
- C++:多态性2(图形的面积)
- JavaEE 之 JPA 常见异常处理办法汇总
- 高级编程之目录(一)
- C语言实现strcpy
- 关于struts2的那点事
- 高级编程之文件I/O(二)
- C++:多态性1(动态联编测试)
- 高级编程之文件I/O(一)
- static关键字--java