UNIX C 进程Part2

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.关闭IO流
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 命令字符串
原文地址:https://www.cnblogs.com/Kernel001/p/7805836.html