Linux操作系统包括三种不同类型的进程,一般分为交互进程、批处理进程和守护进程三类。交互进程是由一个终端(Shell)启动的进程,它既可以在前台运行,也可以在后台运行。批处理进程和终端没有联系,是一个由脚本启动的进程序列。守护进程总是活跃,在系统启动时通过脚本自动启动,或由root启动,通常在后台运行,直到系统关闭时退出。一个进程可以拥有子进程。当父进程终止时,它的子进程也随之终止;而子进程终止时,父进程通常可以继续运行。Linux系统中,init 进程是内核启动的第一个用户级进程,它有许多很重要的任务,比如象启动getty(用于用户登录)、维护运行级别、处理孤儿进程等,所有进程都是它的子进程。
Linux系统提供了一系列管理进程的程序及命令,这里选取我们经常会用到的ps、kill、pkill、top、nohup命令跟特殊命令执行符等做简要介绍。
一、ps命令
ps是Linux下最常用的进程查看命令,该命令可以查看哪些进程正在运行、运行状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到。
1、常用参数:
aux:以BSD风格显示进程 -efH:以System V风格显示进程 -e/-A:显示所有进程 a:显示终端上所有用户的进程 x:显示无终端进程 u:显示详细信息 f:树状显示 w:完整显示信息 l:显示长列表
2、应用实例:
#ps aux //以BSD风格显示进程,很常用 #ps alx //另一种常用输出格式 #ps aux | less //将输出通过管道,使用 less 查看 #ps aux | grep <关键字> //通过关键字查找进程
3、输出字段:
USER 进程所有者 PID 进程ID PPID 父进程 %CPU CPU占用率 %MEM 内存占用率 NI 进程优先级,数值越大,占用CPU时间越少 VSZ 进程虚拟大小 RSS 页面文件占用 TTY 终端ID STAT 进程状态
4、进程状态:
D 不可中断 Uninterruptible sleep (usually IO) R 正在运行,或在队列中的进程 S 处于休眠状态 T 停止或被追踪 Z 僵尸进程 W 进入内存交换(从内核2.6开始无效) X 死掉的进程 < 高优先级 N 低优先级 L 有些页被锁进内存 s 包含子进程 + 位于后台的进程组 l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
二、kill命令
kill [-信号代码] <进程PID>
向PID对应的进程发送信号代码所代表的信号,默认信号代码为-15,对应终止信号。其中进程PID可以同过ps命令查得,要杀死其他用户的进程,需要管理员权限。
常用信号代码:
-l [信号数字] 显示、翻译信号代码 -1 / -HUP 挂起 -2 / -INT 从键盘中断,相当于 Ctrl+c -3 / -QUIT 从键盘退出,相当于 Ctrl+d -4 / -ILL 非法指令 -6 / -ABRT 发送 abort 信号退出 -9 / -KILL 发送 kill 信号退出 -11 / -SEGV 内存错误 -13 / -PIPE 破坏管道 -14 / -ALRM -15 / -TERM 发送终止(Termination)信号 -18 / CONT 继续运行已停止的进程 -19 / -STOP 停止进程,但不结束 -9 -1 结束当前用户的所有进程
三、pkill命令
pkill [-信号代码] [-u 用户名] [-t 终端号] [进程名]
pkill命令是kill命令的批处理版,不同于kill命令的是,它无须指定进程号,只需要指定进程名,就能批量地处理与指定进程名相同的进程。除此之外,pkill还能批量处理指定用户名或者指定终端号下面的所有进程。如果只想单独删除个别进程,那么就只能选择kill命令了。倘若给pkill命令加上“-v”选项,意思便是反向选择,即处理除了指定条件之外的所有进程。要杀死其他用户的进程,需要管理员权限。
应用实例:演示pkill常见用法。
#pkill -9 sshd //杀死指定进程 #sudo pkill -t tty1 //杀死终端1下的所有进程 #sudo pkill -u mylinux //杀死 mylinux 用户下的所有进程 #sudo pkill -vu root //杀死不属于 root 用户的所有进程
四、top命令
top 命令和 ps 命令的基本作用是相同的,显示系统当前的进程及其相关信息,但是 top 命令是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如? 前台执行该命令,它将独占前台,直到用户终止该程序为止。比较准确的说,top命令提供了实时的对系统处理器的状态监视,它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU占用率、内存占用率和执行时间对任务进行排序,而且它的很多特性都可以通过交互式命令或者在定制文件中进行设定。
常用参数:
-c 显示进程启动状态,包括参数、操作对象等,而不只是进程名 -d <秒> 指定刷新频率,即几秒钟刷新一次 -n <次> 指定刷新次数,即刷新几次后退出 -i 禁止显示空闲进程或僵尸进程 -p PID 仅监视指定PID对应的进程 -s 安全模式运行,禁用一些效互指令; -S 累积模式,输出每个进程的总的CPU时间,包括已死的子进程;
交互命令:
<space> 立即刷新 k 交互式杀死进程,提示输入进程 PID (默认发送信号15) r 设定renice,提示输入PID和renice值 s 改变两次刷新时间间隔,以秒为单位 n 设定显示进程数, 0 为不作限制 i 隐藏空闲进程和僵尸进程 S 切换到累积时间模式 l 开关,在顶部显示 uptime 信息 t 开关,在顶部显示 进程和CPU状态 m 开关,在顶部显示 free 信息 c 显示方式切换(进程名/进程启动状态) A 按进程启动顺序进行排序(由新到旧) M 按内存占用排序(由大到小) N 以进程ID排序(由大到小) P 按CPU占用排序(由大到小) T 按时间/累积时间排序 f/F 设定显示字段。设定完成后空格退出 o/O 设定显示字段的排序。大写向前移动,小写向后移动,空格退出 h/? 显示有关安全模式和累积模式的帮助信息 W 把当前的配置写到~/.toprc中
五、nohup命令
nohup <命令>
nohup命令将任务提交到后台,输出附加到 ~/nohup.out 文件,即便用户退出登录,提交的命令仍继续执行。
六、特殊命令执行符
<命令> &
后台执行此命令,如果用户退出登录,则命令停止执行。
<命令1> ; <命令2> ; ……
命令队列,从左向右,依次执行以分号分隔的命令。
<命令1> && <命令2> && ……
命令队列,从左向右,依次执行以 && 分隔的命令,前一个命令执行成功,后一个命令才能执行。
<命令> <Ctrl+z>
“Ctrl键+z键”组合用于挂起当前Shell中的任务。
<命令> <Ctrl+c>
“Ctrl键+c键”组合用于终止当前Shell中的任务。
<命令> <Ctrl+d>
“Ctrl键+d键”组合代表输入完成或者注销。
七、进程的挂起(暂停)、后台跟前台操作
(1) CTRL+z 停止进程并放入后台
(2) jobs 显示当前被挂起(暂停)的进程
(3) bg %N 使第N个任务在后台运行(%前有空格)
(4) fg %N 使第N个任务在前台运行
默认bg,fg不带%N时表示对最后一个进程操作。
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。