Linux上运行的程序和服务都是以进程的形式存在,有时一个服务会启动多个进程,要想用好Linux,了解一点Linux系统是如何管理进程的,以及怎么查看本机上运行的进程等,都是非常必要的。

查看进程

下面几个命令常用于查看系统正在运行的进程

1
2
3
4
5
6
# 列出当前正运行进程的详细信息
$ps -ef
# 使用指定的条件检索当前正在运行的进程并列出进程的ID
$pgrep sshd
# 列出当前shell中运行的后台任务
$jobs

以上命令中:

  • ps提供了许多功能参数,但用的最多的还是ps -ef,列出所有正在运行的进程的详细信息。
  • pgrep 相当于专门为检索进程的定制版的grep,另外,还可以使用参数-u在指定的用户进程中检索,例如:pgrep -u root sshd
  • jobs 用于列出当前 shell 中运行的后台任务。

进程控制

在当前shell里输入命令,运行一个程序,如果程序运行时间过长而你又没有耐心去等待它结束,可以输入ctrl + c来强行终止程序的运行。也可以输入ctrl+z挂起当前程序。一个被挂起的进程可以使用bg命令指派成一个任务在后台继续运行,可以使用jobs命令查看当前shell中的后台任务,如果有多个后台任务在运行,要从后台唤醒任务,则使用fg命令。

  • bg 使挂起的进行继续在后台运行
  • fg 唤醒后台任务

独立于当前shell的进程,比如系统服务:ftpd或者httpd等,或者由其它用户运行的进程,要终止它则需要使用kill命令。

  • kill process-id 通知指定进程将要被终止
  • kill -9 process-id 强行终止一个进程
  • pkill pattern 以指定的模式检索一个进程并且终止它
    使用不带参数的kill去杀死一个进程一般都能成功,如果不行则使用参数-9强行终止,但一般作为最后选项,因为强行终止进程可能会造成进程无法执行退出前的一些必要清场工作,甚至可能会造成数据丢失。
    pkill会将检索到的所有符合条件的进程全部终止,所以使用一定要小心,另外,pkill可以方便的结束一个拥有多个进程的应用程序。

后台进程

在shell中,如果一个脚本或可执行程序运行时间超出了你的预期,你可以使用ctrl+z挂起它,还可以使用bg命令在后台运行挂起的进程,或者使用fg重新唤醒进程到前台来运行。但是,一旦你退出了当前的shell,所以挂起的或后台的进程都将终止。
jobs命令列出所有的挂起进程和后台进程,并给列表中的每个进程分配一个编号,你可以使用这个编号为参数执行bgfg命令,以便唤起或后台化指定的进程。

如果你一开始就需要在后台运行一个程序,在shell中输入命令时在后面加个&,加&运行的命令,在退出当前shell时会被一并终止,如果需要在退出当前shell后程序仍然运行,&就不管用了,需要用nohup命令告诉系统,将后面运行的程序与当前shell分离。

  • command & 在当前shell的后台运行一个命令
  • nohup command 运行命令并将之与当前shell分离