1 进程控制 2 3 ps aux 4 ps axj 5 ps axf 6 ps axm 7 8 一.进程标识符 9 pid_t ---->long int 10 进程的独一无二的标识 11 12 0 调用进程(内核) 13 1 init进程(用户态所有进程的祖先进程) 14 15 getpid(2); 16 getppid(2); 17 18 进程的状态 19 S 可中断的睡眠态 20 R 运行态 21 D 不可中断的睡眠态 22 T 停止态 23 X 终止态 24 Z 僵尸态 25 进程优先级 26 s 会话组长 27 l 多线程 28 < 高优先级 29 N 低优先级 30 + 在前台进程组 31 32 二.fork(2) 33 父子进程之间的不同: 34 <1>pid 35 <2>ppid 36 <3>记录锁 37 <4>资源使用量和进程时间清零 38 <5>未决信号 39 <6>未决闹钟 40 <7>fork返回值 41 42 fork()创建子进程 43 <1>不能保证哪个进程先运行 44 <2>采用copy-on-write 45 <3>在父进程中返回子进程id,子进程中返回0 46 47 vfork()创建子进程 48 <1>保证子进程先运行 49 <2>共享父进程数据段及栈 50 <3>用_exit(2)或者_Exit(2)终止进程 51 52 孤儿进程 53 僵尸进程 54 55 三.wait(2)和waitpid(2); 56 57 wait(&status); == waitpid(-1, &status, 0); 58 59 四.exec(3); 60 execl(); 61 execv(); 62 execlp(); 63 execvp(); 64 execle(); 65 66 五. 67 进程关系 68 1.会话(session):一个或多个进程组组成的 69 getsid(2); 70 setsid(2); 71 72 2.进程组:一个或多个进程组成的 73 getpgrp(2); 74 getpgid(2); 75 setpgid(2); 76 77 守护进程 78 <1>进程组的leader PGID == PID 79 <2>会话的leader SID == PID 80 <3>脱离控制终端 81 82 创建守护进程步骤: 83 <1>umask(0); 84 <2>chdir("/"); 85 <3>关闭0,1,2 86 <4>child-->setsid(); 87 88 log日志的书写 89 openlog(); 90 syslog(); 91 closelog(); 92 93 daemon(3); 94 95 六.竞争条件 96 parent--->wait(); 97 child--->getppid() == 1 98 99 七.system(3) 100 fork()-->exec("/bin/sh", "sh", "-c", "ls -l", NULL) 101 102 八.更改用户id和组id 103 实际用户id 104 有效用户id:校验文件权限 u+s 105 保存设置用户id 106 107 setuid(2); 108 getuid(2); 109 geteuid(2); 110 111 九.进程时间 112 times(2); 113 114 real: >= sys+user; 115 sys: 116 user: 117 118 十.解释器文件