进程管理
创建并运行新进程 fork(), execl(), exit(), getpid(), getppid() fork(): 当前进程(父进程)创建一个新的进程(子进程),创建后的父、子进程继续执行fork()调用点后面的程序,当然也可以使用比如execl() 来替换后续要执行的程序。
execl(): 替换当前进程后续要执行的程序(从execl()调用点后续的程序被替换,也就是说原来在execl()调用点后面的程序不再执行,而去执行execl参数中指定的程序)。
exit(): 终止一个进程,将进程占用的所有资源(内存,文件描述符)交还内核,由其进行再次分配。
getpid(): 获取当前进程PID
getppid(): 获取父进程PID
/* * 获取当前进程pid: int getpid(); * 获取父进程pid: int getppid(); * 执行新的程序: int execl(char *path, char *arg, ...); * 创建子进程: int fork(); * 终止进程: void exit(int status); */ #include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <stdio.h> int main(void) { long pid; pid = fork(); /* fork执行错误 */ if(pid == -1) { perror("fork"); exit(EXIT_FAILURE); } /* parent */ if(pid > 0) { int pret; printf("pid: %d, child_pid: %d\n", getpid(), pid); pret = execl("/usr/bin/sleep","sleep", "100", NULL); if(pret == -1) { perror("parent execl"); exit(EXIT_FAILURE); } } /* child */ if(pid == 0) { int cret; printf("pid: %d, parent_pid: %d\n", getpid(), getppid()); cret = execl("/usr/bin/sleep","sleep", "100", NULL); if(cret == -1) { perror("child execl"); exit(EXIT_FAILURE); } } } 输出