如何在Linux中查找守护进程和僵尸进程列表

本文将指导您了解Zombie进程和守护进程,并帮助我们找到在后台运行的进程。

什么是僵尸进程?

当一个进程结束执行时,它将有一个退出状态报告给它的主进程。由于这一点点信息,进程将作为一个僵尸进程保留在OS进程表中,这表示它不会被安排在将来,但是在确定退出并且不再需要之前,无法完全删除此进程或者不会使用进程ID。

当子进程完成该进程时,主进程将收到一个SIGCHLD信号,指示其子进程之一已完成执行;父进程通常在此时调用wait()系统状态。该状态将为父进程提供子进程的进程退出状态,并将导致子进程被收获或从进程表中删除。

守护程序?

Linux是一个多任务操作系统。任何时候运行的程序都称为一个进程。每个正在运行的命令都至少从一个新进程开始,并且正在运行许多系统进程。

每个进程由称为进程ID(PID)的数字标识。与文件类似,每个进程都有其所有者和组,并且组和所有者权限对于确定哪些文件和设备与那些进程相关很有用。大多数进程还具有启动它们的自己的父进程。

示例:shell是一个进程,并且在shell中执行的任何命令都是属于shell父进程的进程。例外是称为init(8)的特殊进程,它是启动时启动的第一个进程,其PID(Process ID)为1。

有些程序将在用户不断输入的情况下运行,并与终端断开连接。例如,Web服务器响应Web请求而不是用户输入。邮件服务器是此类应用程序的另一个示例。这些类型的程序也称为守护程序。

前台进程

每个进程都必须在前台开始运行。在处理之后,它从键盘获取输入并将其输出发送到屏幕。

您可以通过ls命令看到这种情况。如果要列出当前目录中的所有文件,可以使用以下命令–

这将显示当前目录中的所有文件。

# ls

lost+found user1 user2

该过程在前台运行,并将输出定向到我的屏幕,如果命令需要任何输入,它将等待输入。

当程序在前台运行且花费大量时间时,我们无法从命令提示符处运行其他任何命令,除非该程序完成其处理,否则其他命令将不可用。

后台进程

后台进程在没有用户交互的情况下运行。如果后台进程需要任何输入,它将等待。

在后台运行进程的好处是您可以运行其他命令,并且您不应该等待它完成以启动另一个进程。

启动后台进程的最简单方法是在我们执行的命令的末尾添加“&”号。

# find . / > files

上面的代码会将输出内容写入包含所有文件和目录的文件文件,这将花费更多时间。因此,例如,该行末尾的&符将作为进程在后台运行,并且光标将提示您等待另一条命令。

# find ./ > files &

[1] 76742

#

第一行包含有关后台进程的信息,有关正在运行多少后台进程以及作业号或进程ID。我们需要知道PID在背景和前景之间进行操作。

如果按立即输入,我们将看到以下输出

[1]+ Done find . / > files

第一行告诉您find命令的后台进程已成功完成,并等待另一个命令。

列出正在运行的进程

该命令将通过运行ps(进程状态)命令列出自己的进程。

# ps

PID    TTY       TIME CMD

69301  pts/0    00:00:00 bash

78926  pts/0    00:00:00 ps

ps的常用标志是-f,-f将显示完整信息,它提供了更多信息,如下所示。

# ps -f

UID    PID    PPID    C    STIME    TTY    TIME CMD

root   69301 69261    0    13:34    pts/0  00:00:00 -bash

root   79099 69301    0    13:51    pts/0  00:00:00 ps -f

充分利用PS命令

# ps --help

********* simple selection ********* ********* selection by list *********

-A all processes                          -C by command name

-N negate selection                       -G by real group ID (supports names)

-a all w/ tty except session leaders      -U by real user ID (supports names)

-d all except session leaders             -g by session OR by effective group name

-e all processes                          -p by process ID

                                          -q by process ID (unsorted & quick)

T all processes on this terminal          -s processes in the sessions given

a all w/ tty, including other users       -t by tty

g OBSOLETE -- DO NOT USE                  -u by effective user ID (supports names)

r only running processes                   U processes for specified users

x processes w/o controlling ttys           t by tty

*********** output format ********** *********** long options ***********

-o,o user-defined    -f full              --Group --User --pid --cols --ppid

-j,j job control     s signal             --group --user --sid --rows --info

-O,O preloaded -o    v virtual memory     --cumulative --format --deselect

-l,l long             u user-oriented    --sort --tty --forest --version

-F extra full        X registers         --heading --no-heading --context

                                         --quick-pid

********* misc options *********

-V,V show version       L list format codes        f ASCII art forest

-m,m,-L,-T,H threads    S children in sum          -y change -l format

-M,Z security data      c true command name       -c scheduling class

-w,w wide output        n numeric WCHAN,UID          -H process hierarchy

停止进程

一个过程可以通过几种方式停止。通常,从命令行通过发送CTRL + C击键–将退出命令。当进程在前台运行时,此方法有效。

如果某个进程在后台模式下运行,那么首先您需要使用ps命令获取其Job ID,然后您可以使用kill命令杀死该进程,如下所示–

# ps -f

UID    PID    PPID    C    STIME TTY       TIME CMD

root  69301   69261   0    13:34 pts/0    00:00:00 -bash

root  82913   69301   0    13:58 pts/0    00:00:00 ssh root@192.168.1.89

root  82952   69301   0    13:58 pts/0    00:00:00 ps -f

# kill 82913

Terminated

在这里,kill命令将终止ssh root@192.168.1.89。如果某个进程忽略了常规终止,则可以使用kill -9,后跟进程ID,如下所示。

# ps -f

UID    PID    PPID     C    STIME TTY    TIME CMD

root    69301 69261    0 13:34 pts/0    00:00:00 -bash

root    83964 69301    0 14:00 pts/0    00:00:00 ps -f

[1]+    Killed                ssh root@192.168.1.89

我们如何查看系统上是否正在运行僵尸进程。

运行“ ps aux”并在STAT列中查找Z。

# ps -aux

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

USER    PID    %CPU    %MEM    VSZ    RSS    TTY    STAT    START    TIME    COMMAND

root    11647 0.0 0.1 549100 7348 ? S Mar18 0:13 /usr/libexec/clock-applet --oaf-activate-iid=OAFIID:GNOME_ClockApplet_Factory --oaf-ior-fd=28

root 11648 0.0 0.1 400744 5552 ? S Mar18 0:00 /usr/libexec/gdm-user-switch-applet --oaf-activate-iid=OAFIID:GNOME_FastUserSwitchApplet_Factry --oaf-ior-fd=34

root 11649 0.0 0.1 290996 4072 ? S Mar18 0:00 /usr/libexec/notification-area-applet --oaf-activate-iid=OAFIID:GNOME_NotificationAreaApplet_Factory --oaf-ior-fd=40

root 11681 0.0 0.0 137416 1524 ? S Mar18 0:00 /usr/libexec/gvfsd-burn --spawner :1.9 /org/gtk/gvfs/exec_spaw/

root 11696 0.0 0.0 135276 1320 ? S Mar18 0:00 /usr/libexec/gvfsd-metadata

root 12196 0.0 0.0 0 0 ? Z Mar18 0:20 [yumBackend.py] <defunct

root 13284 0.0 0.1 303428 6212 ? Sl Mar18 0:00 gnome-terminal

root 13286 0.0 0.0 8228 620 ? S Mar18 0:00 gnome-pty-helpe

root 13287 0.0 0.0 108340 1340 pts/0 Ss+ Mar18 0:00 bas

root 14347 0.0 0.0 223336 3408 ? S 10:50 0:00 smbd -D

root 14578 0.0 0.4 425524 18172 ? Ss Mar25 0:21 /usr/sbin/http

apache 15091 0.0 1.5 414648 61904 ? S Apr05 0:44 php-fpm: pool ww

postfix 18359 0.0 0.0 80948 3384 ? S 12:24 0:00 pickup -l -t fifo -u

在上面的示例中,进程ID为12196的进程的状态为z,请使用kill命令杀死该进程。

#kill -9 12196

在阅读完本文之后,您将能够了解什么是僵尸进程和守护程序,以及如何查找和停止进程以及如何在后台创建进程。

以上是 如何在Linux中查找守护进程和僵尸进程列表 的全部内容, 来源链接: utcz.com/z/358942.html

回到顶部