进程控制
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:
十.解释器文件
了解