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 十.解釋器文件