Linux 进程的系统调用

Linux 进程的系统调用

子进程创建

fork() 创建子进程。fork()后会有两个并发进程执行,子进程复制了父进程的数据段,包括全局变量。父进程返回子进程的PID, 子进程返回0。 头文件:stdio.h
vfork() 子进程与父进程共享地址空间。调用vfork()创建的子进程后,父进程被挂起,直到子进程结束。头文件:stdio.h

进程映像的更换

用新的程序代码覆盖原先父进程的代码

execl 系列

将每个命令行参数作为函数的参数传递。参数最后要以NULL作为结束标志。头文件:unistd.h
1. int execl(const char *path, const char *arg, …);
path:路径 arg:选项
2. int execlp(const *file, const char *arg, …);
file:文件名 arg:选项
3. int execle(const char *path, const char *arg, …, char *const envp[]);
path:路径 arg:选项 envp:环境变量

execv 系列

将所有参数包装到一个数组中传递。头文件:unistd.h
1. int execv(const char *path, const char *argv[]);
path:路径 arg:选项
2. int execvp(const *file, const char *argv[]);
file:文件名 arg:选项
3. int execve(const char *path, const char *argv[], char *const envp[]));
path:路径 arg:选项 envp:环境变量

p: 函数的第一个参数是文件程序名
e:需要在envp数组中设置环境变量
若调用成功,无返回值;若调用失败,返回-1。

进程等待

头文件:sys/wait.h

pid_t wait(int *status);
status: 指向子进程的退出码
若不关心子进程的退出状态,则设置status的值为NULL
若执行成功,返回子进程的PID;若执行失败,返回-1
pid_t waitpid(pid_t pid, int *status, int option);
status: 指向子进程的退出码

父进程等待当前进程的子进程终止,在等待期间,父进程阻塞。子进程运行结束后父进程才运行,间接起到进程同步的作用。

进程的终止

终止正在运行的进程。等待父进程调用wait()对齐资源进程回收。

#include<stdlib.h>
void exit(int status);

status:用来传递进程结束时的状态。一般来说,exit(0) 表示程序正常退出,exit⑴/exit(-1)表示程序异常退出。

猜你喜欢

转载自blog.csdn.net/neverwa/article/details/79983356