Unix高级编程之进程控制

Posted 爱新觉罗玄烨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unix高级编程之进程控制相关的知识,希望对你有一定的参考价值。

进程控制

ps aux
ps axj
ps axf
ps axm

一.进程标识符
pid_t ---->long int
进程的独一无二的标识

0 调用进程(内核)
1 init进程(用户态所有进程的祖先进程)

getpid(2);
getppid(2);

进程的状态
S 可中断的睡眠态
R 运行态
D 不可中断的睡眠态
T 停止态
X 终止态
Z 僵尸态
进程优先级
s 会话组长
l 多线程
< 高优先级
N 低优先级
+ 在前台进程组

二.fork(2)
父子进程之间的不同:
<1>pid
<2>ppid
<3>记录锁
<4>资源使用量和进程时间清零
<5>未决信号
<6>未决闹钟
<7>fork返回值

fork()创建子进程
<1>不能保证哪个进程先运行
<2>采用copy-on-write
<3>在父进程中返回子进程id,子进程中返回0

vfork()创建子进程
<1>保证子进程先运行
<2>共享父进程数据段及栈
<3>用_exit(2)或者_Exit(2)终止进程

孤儿进程
僵尸进程

三.wait(2)和waitpid(2);

wait(&status); == waitpid(-1, &status, 0);

四.exec(3);
execl();
execv();
execlp();
execvp();
execle();

五.
进程关系
1.会话(session):一个或多个进程组组成的
getsid(2);
setsid(2);

2.进程组:一个或多个进程组成的
getpgrp(2);
getpgid(2);
setpgid(2);

守护进程
<1>进程组的leader PGID == PID
<2>会话的leader SID == PID
<3>脱离控制终端

创建守护进程步骤:
<1>umask(0);
<2>chdir("/");
<3>关闭0,1,2
<4>child-->setsid();

log日志的书写
openlog();
syslog();
closelog();

daemon(3);

六.竞争条件
parent--->wait();
child--->getppid() == 1

七.system(3)
fork()-->exec("/bin/sh", "sh", "-c", "ls -l", NULL)

八.更改用户id和组id
实际用户id
有效用户id:校验文件权限 u+s
保存设置用户id

setuid(2);
getuid(2);
geteuid(2);

九.进程时间
times(2);

real: >= sys+user;
sys:
user:

十.解释器文件
了解

 

以上是关于Unix高级编程之进程控制的主要内容,如果未能解决你的问题,请参考以下文章

Unix环境高级编程(十三)守护进程

Unix环境高级编程线程控制

unix环境高级编程之进程

Unix环境高级编程(十四)守护进程实现时间服务器

Unix高级编程之进程环境

unix环境高级编程学习笔记