高级编程之进程(三)
来源:互联网 发布:excel数据导入matlab 编辑:程序博客网 时间:2024/06/05 16:26
进 程 的 使 用
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 的是否
有变化,有变化则备份到其他路径。
- 高级编程之进程(三)
- 高级编程之进程间通信(三)
- 高级编程之网络编程(三)
- 高级编程之进程(一)
- 高级编程之进程(二)
- Windows高级编程之进程
- UNIX环境高级编程——进程(三)
- 高级编程之进程间通信(一)
- 高级编程之进程间通信(二)
- python的高级编程--之进程
- UNIX环境高级编程之进程环境
- Unix环境高级编程之进程控制
- 《Unix环境高级编程》之 进程控制
- 《Unix环境高级编程》之 进程通信
- UNIX环境高级编程笔记之进程
- linux系统编程之进程(三):进程复制fork,孤儿进程,僵尸进程
- linux系统编程之进程(三):进程复制fork,孤儿进程,僵尸进程
- linux系统编程之进程(三):进程复制fork,孤儿进程,僵尸进程
- Codevs 1074 [NOI 2002]食物链
- 设计模式之享元模式
- iOS 友盟分享
- XMPP协议实现原理介绍
- JAVA设计模式:组合模式
- 高级编程之进程(三)
- volatile的作用
- WebService 的发布方式
- __devexit_p的作用
- struts2 上传文件
- 被遗忘的 Logrotate
- python实现的直接插入排序算法
- 2016.1.22寒假任务
- 解决TableViewCell分割线默认左边间隔15点