Linux下进程控制函数
文章目录
重要的进程函数 获取进程ID
#include
#include
pid_t getpid(void) //返回调用进程的ID
pid_t getppid(void) //返回父进程的ID
创建与终止进程 创建进程
Linux下进程控制函数 文章目录 重要的进程函数 获取进程ID
创建与终止进程 创建进程
fork出来的进程会获得与父进程用户级虚拟地址空间相同(但是独立)的一份副本,但是PID不同。 fork是一个有趣但令人迷惑的函数,它只被调用一次,但是会返回两次,一次在父进程中,一次在子进程中。在父进程中会返回子进程的pid(非零),在子进程中会返回0,因此可以以此来区分是程序是在子进程中执行还是在父进程中执行。
获得输出:
从结果看出父子进程并不共享数据x,但是共享文件,因为都把输出打到了标志输出stdout上。 终止进程
回收子进程 僵死进程(zombie process) 终止但未被回收的进程被称为僵尸进程。当一个进程由于某中原因被终止时,内核并不会立刻把它从系统中清除,它会被保持在一种已终止的状态,直到被它的父进程回收。 如果一个僵死进程在被回收之前,父进程就已经结束,那么内核会安排init进程来回收,init进程的pid为1,是所有进程的祖先。 一个进程可以通过调用waitpid函数来等待它的子进程终止:
options参数 waitpid中options参数对行为的影响: options行为 0(默认) 挂起调用线程,若此时pid>0,则等待对应pid的子进程结束,若此时pid=-1,则等待任一子进程结束 WNOHANG 不等待子进程结束,立即返回,若此时返回值为0linux feof函数,表示没有子进程结束 WUNTRACED 挂起调用线程,直到任一子线程终止或者被停止,注意与默认值0的区别为,默认值只返回正常终止的子进程 WCONTINUED 挂起调用线程,直到任一子线程终止,或者任一一个被停止的子线程收到SIGCONT信号重新开始执行 注意options的参数可以进行组合,比如WNOHANG | WUNTRACED。 status参数 status值含义 WIFEXITED(status) 如果子进程通过exit或者return返回,则为真 WEXITSTATUS(status) 返回一个正常终止的子进程的退出状态,只有在WIFEXITED(status)为真时,才会定义这个状态 WIFSIGNALED(status) 如果子进程是因为一个未被捕获的信号终止的,那么就返回真 WTERMSIG(status) 返回导致子进程终止的信号编号,只有当WIFSIGNALED(status)为真时,才定义这个信号 WIFSTOPPED(status) 如果引起返回的子进程当前是停止的,那么久返回真 WSTOPSIG(status) 返回引起子进程停止的信号的编号。只有在WIFSTOPPED()返回为真时,才定义这个状态 WIFCONTINUED(status) 如果子进程收到SIGCONT信号重新启动,则返回真 错误条件 如果调用进程没有子进程,waitpid返回-1,并且设置errorno为ECHILD, 如果waitpid函数被一个信号中断,返回-1,设置errorno为EINTR。 代码演示
注意子进程退出的顺序不是一定的,如果要让父进程按照子进程创建的顺序来回收子进程,可以做出如下修改:
wait函数 wait函数时waitpid的简单版本:
调用wait函数等价于调用waitpid(-1,&status,0)。 让进程休眠 sleep函数 sleep函数会让进程挂起一段时间:
如果挂起时间到,函数返回0,如果被中断而导致返回,将返回剩余的挂起时间。 pause函数 pause函数会将进程挂起,直到进程收到一个信号
加载并运行新的程序 execve函数可以在当前进程的上下文中加载并允许一个新的程序
其中argv与envp均指向以Null为结尾的指针数组; 在使用中,可以用environ(系统全局变量)变量传入envp[]数组中。 环境变量相关函数 获取环境变量
设置与取消环境变量
一般来说,环境变量已"name=value"这样键值对的方式存在。 利用进程控制接口,编写简单的shell程序
(编辑:达州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Handling of asynchronous events---reference
- 支付宝钱包手势密码怎么修改 支付宝钱包怎么修改手势密码
- 用AVplayer播放器直接打开KIT相机套件中的电影
- 在Linux中使用Bash脚本清理早于 “X” 天的文件/文件夹
- system libzip must be upgraded to version gt;= 0.11
- c# – Linux上的Mono本机P/Invoke:DllNotFound
- iOS7完美越狱后AppSync补丁安装教程
- 保卫萝卜2什么时候更新 更新时间
- 如何破解乐视tv 教你一种简单方法破解乐视tv
- Linux流行系统故障:su切换用户带来的疑惑