Linux 进程总结

内容纲要

一、命令类

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 进程组

  1. 在shell一条命令产生的进程形成一个进程组
  2. 进程组内的第一个进程称领头进程(process group leader)
  3. 进程组的PGID即领头进程的PID
  4. 进程组的生命周期为最后一个进程结束或者加入其他进程组
  5. 可以利用getpgrp()获取进程组ID
  6. ash 没有作业控制能力,不管理进程组,在ash中创建的进程都属于同一个session 同一个进程组
  7. 一个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。
保证每个进程都会被调度,不存在进程完全得不到执行的情况。

留下评论