Linux网络编程-exec函数族
根据指定文件名找到可执行文件,并用它来取代调用进程。(调用成功不会返回,失败返回-1)。
从虚拟内存地址空间上理解,就是除内核区外,其他用户区等都被可执行程序的用户区替换。
exec函数族在man文档中
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 envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
path:可执行文件;agr:可执行文件的参数列表(第一个参数一般为名称,最后以null结束)。最常用的execl,excelp。execl(“bin/ps”,“ps”,NULL);而excelp可以从环境变量读取可执行文件。
僵尸进程&孤儿进程
void _exit(int status);
void exit(int status);
c语言库中的exit退出程序会先刷新I/O缓冲,关闭文件描述符再终止进程。
孤儿进程:父进程运行结束,子进程还在运行。内核会把孤儿进程的父进程设置为init。 因此孤儿进程无危害。
僵尸进程:内核区的PCB数据需要父进程释放,如果进程终止,父进程没有回收子进程就会变成僵尸进程,僵尸进程不能被kill杀死。僵尸进程的pid号一直被占用,有危害。所以父进程必须使用wait和waitpid收回资源。