内容纲要
一、命令类
1.1 使用的命令
- kill -l
- ps -j
- kill 1829
- killall httpd
- pstree
- ps -aux
1.2 命令解释
1.2.1 ps -aux
yhlei@yhlei-VirtualBox:~$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.1 160232 9416 ? Ss 12:16 0:02 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 12:16 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 12:16 0:00 [rcu_gp]
yhlei 3175 0.0 0.0 29832 5584 pts/1 Ss 12:23 0:00 bash
yhlei 3200 0.0 0.0 104992 4020 pts/1 Sl 12:24 0:00 router/route.bin
列名 | 含义 |
---|---|
UARE | 进程拥有者 |
PID | 进程ID |
CPU | CPU占用率 |
MEM | 内存占用率 |
VSZ | 使用掉的虚拟内存量 (Kbytes) |
RSS | 占用的固定的内存量 (Kbytes) |
TTY | 使用的终端,如果与终端无关则显示? |
STAT | 进程状态, R:runing S:sleep T:stop Z:zombie |
1.2.2 ps -j
yhlei@yhlei-VirtualBox:~$ ps -j
PID PGID SID TTY TIME CMD
3175 3175 3175 pts/1 00:00:00 bash
3200 3200 3175 pts/1 00:00:00 route.bin
3304 3304 3175 pts/1 00:00:00 top
3305 3304 3175 pts/1 00:00:00 more
3740 3740 3175 pts/1 00:00:00 ps
1.2.3 kill -l
9号信号是最强信号,不能被进程忽略。
yhlei@yhlei-VirtualBox:~$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
1.2.4 kill
kill 1839
杀死进程ID为1839进程
1.2.5 killall
killall httpd
杀死进程名称为httpd 所有进程
二、进程概念
2.1 进程组
- 在shell一条命令产生的进程形成一个进程组
- 进程组内的第一个进程称领头进程(process group leader)
- 进程组的PGID即领头进程的PID
- 进程组的生命周期为最后一个进程结束或者加入其他进程组
- 可以利用getpgrp()获取进程组ID
- ash 没有作业控制能力,不管理进程组,在ash中创建的进程都属于同一个session 同一个进程组
- 一个session 可以有多个进程组
2.2 孤儿进程
当父进程退出后,子进程还在运行,则子进程成为孤儿进程,孤儿进程会被init进程收养,由init进程收集其状态
2.3 僵尸进程
一个子进程在父进程没有调用wait或者waitpid函数的情况下退出,则这个子进程就是僵尸进程。
三、函数
3.1 exec 系列函数
execve(const char *path, char *const argv[], char *const envp[]);
属于基本的系统调用,其他函数都是在此基础上包装。
3.2 deamon进程
守护进程独立于控制终端,大多数启动后一直工作。
守护进程第一件事就是要脱离终端,因为从终端启动的应用会依附这个终端,这个终端也是该进程的控制终端,当终端关闭时,终端启动的进程也会被关闭。但是守护进程需要脱离这个限制。
3.3 setsid
setsid()调用成功后,返回新的会话的ID,调用setsid函数的进程成为新的会话的领头进程,并与其父进程的会话组和进程组脱离。
由于会话对控制终端的独占性,进程同时与控制终端脱离。
四、进程调度
4.1 CFS调度算法
Linux默认创建的都是CFS(完全公平调度算法)调度类,当CPU的运行队列内不存在STOP和RT类的任务时才会调度CFS队列中的进程。
2.6.23版本引入CFG调度器,它在真实的硬件上模拟了一个理想的、精确的多任务CPU。
保证每个进程都会被调度,不存在进程完全得不到执行的情况。