【Linux】进程等待&程序替换
2016-08-21 10:44
543 查看
进程等待:wait、waitpid
一个进程在终止时会关闭所有的文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,且内核中还保存着一些信息。如果是正常终止,则保存着退出状态;如果是异常终止,则保存着导致该进程终止信号。这个进程的父进程可以调用wait和waitpid获取这些信息,然后彻底清除这个进程。
等待目的-- 1)为了让父进程读取到子进程退出状态信息(输出型参数status)。
2)让系统释放子进程占有的僵尸状态的资源。
3)保证子进程先退出,父进程最后退出。(父子进程退出同步、有顺序)
等待方式--阻塞、非阻塞、异步
1.wait
子进程运行结束,父进程等到子进程的退出码,父进程退出。
2.waitpid
进程退出的三种情况:
(1)进程运行完,结果正确 (2)进程运行完,结果错误 (3)进程代码没有运行完,结果未知。
当一个进程正常或异常终止时,内核就向其父进程发送一个SIGCHLD信号。
进程是否正常运行:exit( )---0-正常 非零-异常<即退出码(0-255)>
低八位-status&0xff <信号编号 (子进程是否跑完) 0-没发送信号> 次低八位-(status>>8)&0xff<退出码>;
3.非阻塞等待
子进程一直循环,不退出,父进程也不能退出。
进程的程序替换 execv:
子进程不执行父进程的任何代码,执行其他程序(ls)(用 ls code,ls data)
1)exec的6种函数:
#incldue<unistd.h>
int execl(const char* path,const char* arg,....);
int execlp(const char* file,const char* arg,....);
int execle(const char* path,const char* arg,..., char* const emp[]);
int execv(const char* path,char* const argv[]);
int execp(const char* file,char* const argv[]);
int execve(const char* path,char* const argv[],char* const emp[]);
2)函数的一些规则:
函数名exec:带上p--二进制文件不带路径,否则要path; 包含e--允许传递函数变量表envp[ ];
l--参数是可变参数列表;v--参数是argv[ ]向量表统一传参;
3)函数的应用:
在子进程中添加execl函数
一个进程在终止时会关闭所有的文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,且内核中还保存着一些信息。如果是正常终止,则保存着退出状态;如果是异常终止,则保存着导致该进程终止信号。这个进程的父进程可以调用wait和waitpid获取这些信息,然后彻底清除这个进程。
等待目的-- 1)为了让父进程读取到子进程退出状态信息(输出型参数status)。
2)让系统释放子进程占有的僵尸状态的资源。
3)保证子进程先退出,父进程最后退出。(父子进程退出同步、有顺序)
等待方式--阻塞、非阻塞、异步
1.wait
子进程运行结束,父进程等到子进程的退出码,父进程退出。
2.waitpid
进程退出的三种情况:
(1)进程运行完,结果正确 (2)进程运行完,结果错误 (3)进程代码没有运行完,结果未知。
当一个进程正常或异常终止时,内核就向其父进程发送一个SIGCHLD信号。
进程是否正常运行:exit( )---0-正常 非零-异常<即退出码(0-255)>
低八位-status&0xff <信号编号 (子进程是否跑完) 0-没发送信号> 次低八位-(status>>8)&0xff<退出码>;
3.非阻塞等待
子进程一直循环,不退出,父进程也不能退出。
进程的程序替换 execv:
子进程不执行父进程的任何代码,执行其他程序(ls)(用 ls code,ls data)
1)exec的6种函数:
#incldue<unistd.h>
int execl(const char* path,const char* arg,....);
int execlp(const char* file,const char* arg,....);
int execle(const char* path,const char* arg,..., char* const emp[]);
int execv(const char* path,char* const argv[]);
int execp(const char* file,char* const argv[]);
int execve(const char* path,char* const argv[],char* const emp[]);
2)函数的一些规则:
函数名exec:带上p--二进制文件不带路径,否则要path; 包含e--允许传递函数变量表envp[ ];
l--参数是可变参数列表;v--参数是argv[ ]向量表统一传参;
3)函数的应用:
在子进程中添加execl函数
相关文章推荐
- 深入探讨:unix多进程编程之wait()与waitpid()函数
- linux exec的用法
- Linux waitpid
- linux中waitpid系统调用
- wait()、waitpid()及waitid()介绍
- 进程等待&程序替换
- 关于waitpid()中的WNOHANG
- Linux编程基础之进程等待(wait()函数)
- APUE:进程:wait、waitpid
- waitpid非阻塞时的用法
- 僵尸进程的产生和避免
- Linux 进程之wait,waitpid讲解
- Linux wait和waitpid和kill
- 获取子进程终止状态:wait和waitpid
- linux文章总目录
- linux进程编程(二)-- waitpid()函数使用
- linux僵尸进程产生的原因以及如何避免产生僵尸进程
- 在进程中运行新代码 execl、execle、execlp、execv、execve和execvp函数
- 等待子进程
- Linux之进程第二谈