码迷,mamicode.com
首页 > 系统相关 > 详细

Unix高级编程之进程控制

时间:2016-09-10 19:06:03      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

进程控制

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高级编程之进程控制

标签:

原文地址:http://www.cnblogs.com/axjlxy/p/5859883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!