UNIX 进程控制

8.2进程标识符

每个进程的唯一标识(非负整数)ID。
ID为0的进程通常为调度进程(交换进程)内核程序,不执行任何磁盘上的程序。
ID为1通常是init进程。
ID为2页守护进程。

#include <unistd.h>
//获取当前进程ID
pid_t pid = getpid();
//获取父进程
pid_t ppid = getppid();
//实际用户ID
getuid();
//有效用户ID
geteuid();
//实际组ID
getgid();
//有效组ID
getegid();

8.3 fork函数

#include <unistd.h>
pid_t pid = fork();//子进程返回0, 父进程返回子进程

文件共享(父子进程每个相同的打开描述符共享一个文件表项)。
如果希望执行一个新进程,则fork复制后立即调用exec即可。

8.4 vfork函数

和fork后调用exec功能相似,效率更高。
vfork保证子进程先运行(特定用处,也要注意死锁)!

8.5 exit 函数

三种异常终止

  1. 调用abort ,SIGABRT信号。
  2. 进程收到某些信(异常)。
  3. 最后一个线程对取消请求作出响应。

父进程终止后,其所有的子进程都将被init进程领养。
子进程终止但父进程未对其进行善后处理。(僵死进程,ps(1) 将僵死进程状态打印为 Z)(被init领养的进程不会成为僵死进程)。

8.6 wait和waitpid函数

调用这两个函数。

  1. 如果子进程还在运行则堵塞。
  2. 如果自进程终止(僵死状态)则立即返回,并善后僵死子进程。
  3. 如果没有子进程立即出错返回。
#include <sys/wait.h>
pid_t wait(int *statloc);
pit_t waitpid(pid_t pid,int* statloc,int options);
//返回状态的宏
//WIFEXITED 正常结束
//WIFSIGNALED 异常终止
//WIFSTOPED
//WIFCONTINUED
// options宏
// WCONTINUED 
// WNOHANG  立即返回 返回值为0
// WUNTRACED

8.7 waitid函数

拓展版 waitpid (只有Solaris支持)

8.8 wait3和wait4

多一个参数 rusage* rusage 用来返回终止进程和其子进程使用的资源汇总。

8.9 竞争条件

进程间同步(这边不详解,后面再说)。

8.10 exec 函数

用全新的程序替代当前进程,从main函数开始执行。

8.11 更改用户ID和组ID

控制权限

#include <unistd.h>
int setuid(uid_t uid);
int setgid(git_t gid);

8.12 解释器文件

8.13 system 函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值