1.获取进程ID
#include <unistd.h> pid_t getpid(void); //获取子进程id pid_t getppid(void);//获取父进程id
2.获取实际用户ID和实际用户组ID
#include <unistd.h> uid_t getuid(void); uid_t getgid(void);
3.有效用户ID和有效组ID
#include <unistd.h> uid_t geteuid(void); uid_t getegid(void);
4.进程创建
#include <unistd.h> pid_t fork(void);//写时复制方式创建进程,把父进程资源复制到子进程,只要代码区是共享 这种进程退出方式 --exit(status) pid_t vfork(void);//和父进程共享资源 退出进程函数_exit(status)
5.进程正常退出
exit退出处理函数
#include <stdlib.h> void exit(int status); exit退出函数在执行退出函数的时候会做下面三步 1.检查或执行遗言函数atexit、on_exit 2.关闭I\O流 3.删除tmpfile函数创建的临时文件
_exit()和_Exit()
#include <unistd.h> void _exit(int status);//vfork()相对应的退出函数 #include <stdlib.h> void _Exit(int status);//和exit函数相似 退出前处理以下三件事儿 1.关闭文件描述符 2.将子进程交给init进程收养 3.向调用的父进程发SIGCHLD(17)信号
6.遗言函数
#include <stdlib.h> int atexit(void(*function)(void)); 成功返回0,失败非0 int on_exit(void(*function)(int,void*),void* arg); 成功返回0,失败返回非0 --function:函数指针 --arg:泛型指针(万能指针),该参数指向function处理函数
7.异常终止进程
#include <stdlib.h> void abort(void); 不返回 进程解除SIGABRT(6)信号阻塞,然后导致进程阻塞
8.进程回收处理
wait
#include <sys/wait.h> pid_t wait(int* status);//为子进程收尸,回收系统资源 成功返回子进程ID,失败-1
waitpid
#include <sys/wait.h> pid_t pid = waitpid(pid_t pid,int* status,int option); 成功返回子进程pid或0,失败返回-1 --pid:可取下值 < -1 ;等待特定进程组的任意子进程 -1;等待并回收任意子进程和wait函数一样 0;回收同进程组的调用进程中任意子进程 >0;回收特定子进程(由pid标识) --option:可取下值 0;阻塞模式,直至子进程终止 WNOHANG,非阻塞模式,子进程仍在运行返回 0;
9.exec在一个进程上创建新的进程,但pid会不变
#include <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 envp[]); int execv(const char* path,char* const arg[]); int execvp(const char* file,char* const arg[]); int execve(const char* path,char* const arg[],char* const envp[]); --l 即list 字符指针 命令行 列表参数 --p 即path 根据环境变量中文件 --e 即env 环境字符指针数组 --v 即vector 命令行参数
exec函数,不返回
10.system函数
#include <stdlib.h> int system(const char* command); --command 命令字符串