文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>bash判断进程存在的3种方法

bash判断进程存在的3种方法

时间:2010-03-15  来源:wangchenxicool

当前系统中的进程:
    apple@ubuntu:~$ ps -ef
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 13:57 ?        00:00:02 /sbin/init
    root         2     0  0 13:57 ?        00:00:00 [kthreadd]
    root         3     2  0 13:57 ?        00:00:00 [migration/0]
    root         4     2  0 13:57 ?        00:00:00 [ksoftirqd/0]
    root         5     2  0 13:57 ?        00:00:00 [watchdog/0]
    root         6     2  0 13:57 ?        00:00:00 [migration/1]
    root         7     2  0 13:57 ?        00:00:00 [ksoftirqd/1]
    root         8     2  0 13:57 ?        00:00:00 [watchdog/1]
    root         9     2  0 13:57 ?        00:00:00 [events/0]
    root        10     2  0 13:57 ?        00:00:00 [events/1]
    root        11     2  0 13:57 ?        00:00:00 [khelper]
    root        12     2  0 13:57 ?        00:00:00 [kstop/0]
    root        13     2  0 13:57 ?        00:00:00 [kstop/1]
    root        14     2  0 13:57 ?        00:00:00 [kintegrityd/0]
    root        15     2  0 13:57 ?        00:00:00 [kintegrityd/1]
    root        16     2  0 13:57 ?        00:00:00 [kblockd/0]
    root        17     2  0 13:57 ?        00:00:00 [kblockd/1]
    root        18     2  0 13:57 ?        00:00:00 [kacpid]
    root        19     2  0 13:57 ?        00:00:00 [kacpi_notify]
    root        20     2  0 13:57 ?        00:00:00 [cqueue]
    root        21     2  0 13:57 ?        00:00:00 [ata/0]
    root        22     2  0 13:57 ?        00:00:00 [ata/1]
    root        23     2  0 13:57 ?        00:00:00 [ata_aux]
    root        24     2  0 13:57 ?        00:00:00 [ksuspend_usbd]
    root        25     2  0 13:57 ?        00:00:00 [khubd]
    root        26     2  0 13:57 ?        00:00:00 [kseriod]
    root        27     2  0 13:57 ?        00:00:00 [kmmcd]
    root        28     2  0 13:57 ?        00:00:00 [btaddconn]
    root        29     2  0 13:57 ?        00:00:00 [btdelconn]
    root        30     2  0 13:57 ?        00:00:00 [pdflush]
    root        31     2  0 13:57 ?        00:00:00 [pdflush]
    root        32     2  0 13:57 ?        00:00:00 [kswapd0]
    root        33     2  0 13:57 ?        00:00:00 [aio/0]
    root        34     2  0 13:57 ?        00:00:00 [aio/1]
    root        35     2  0 13:57 ?        00:00:00 [ecryptfs-kthrea]
    root        38     2  0 13:57 ?        00:00:00 [pciehpd]
    root        39     2  0 13:57 ?        00:00:00 [scsi_eh_0]
    root        40     2  0 13:57 ?        00:00:00 [scsi_eh_1]
    root        41     2  0 13:57 ?        00:00:00 [kstriped]
    root        42     2  0 13:57 ?        00:00:00 [kmpathd/0]
    root        43     2  0 13:57 ?        00:00:00 [kmpathd/1]
    root        44     2  0 13:57 ?        00:00:00 [kmpath_handlerd]
    root        45     2  0 13:57 ?        00:00:00 [ksnapd]
    root        46     2  0 13:57 ?        00:00:00 [kondemand/0]
    root        47     2  0 13:57 ?        00:00:00 [kondemand/1]
    root        48     2  0 13:57 ?        00:00:00 [krfcommd]
    root       256     2  0 13:57 ?        00:00:00 [mpt_poll_0]
    root       717     2  0 13:57 ?        00:00:00 [scsi_eh_2]
    root       753     2  0 13:57 ?        00:00:00 [kdmflush]
    root       764     2  0 13:57 ?        00:00:00 [kdmflush]
    root       795     2  0 13:57 ?        00:00:00 [kjournald]
    root       915     1  0 13:57 ?        00:00:00 /sbin/udevd --daemon
    root      1617     2  0 13:57 ?        00:00:00 [kpsmoused]
    root      2166     1  0 13:57 tty4     00:00:00 /sbin/getty 38400 tty4
    root      2167     1  0 13:57 tty5     00:00:00 /sbin/getty 38400 tty5
    root      2172     1  0 13:57 tty2     00:00:00 /sbin/getty 38400 tty2
    root      2173     1  0 13:57 tty3     00:00:00 /sbin/getty 38400 tty3
    root      2174     1  0 13:57 tty6     00:00:00 /sbin/getty 38400 tty6
    root      2244     1  0 13:57 ?        00:00:00 /usr/sbin/acpid -c /etc/acpi/eve
    root      2259     1  0 13:57 ?        00:00:00 /usr/sbin/syslog-ng -p /var/run/
    105       2279     1  0 13:57 ?        00:00:00 /bin/dbus-daemon --system
    root      2311     1  0 13:58 ?        00:00:00 /usr/sbin/incrond -f /etc/incron
    root      2381     1  0 13:58 ?        00:00:00 dhclient3 -e IF_METRIC=100 -pf /
    root      2442     1  0 13:58 ?        00:00:00 /usr/sbin/sshd
    root      2453     1  0 13:58 ?        00:00:00 /usr/lib/postfix/master
    postfix   2465  2453  0 13:58 ?        00:00:00 pickup -l -t fifo -u -c
    postfix   2468  2453  0 13:58 ?        00:00:00 qmgr -l -t fifo -u
    108       2472     1  0 13:58 ?        00:00:00 /usr/sbin/hald
    root      2475     1  0 13:58 ?        00:00:00 /usr/sbin/console-kit-daemon
    root      2538  2472  0 13:58 ?        00:00:00 hald-runner
    root      2567  2538  0 13:58 ?        00:00:00 hald-addon-input: Listening on /
    root      2594  2538  0 13:58 ?        00:00:00 hald-addon-storage: polling /dev
    root      2595  2538  0 13:58 ?        00:00:00 hald-addon-storage: no polling o
    108       2600  2538  0 13:58 ?        00:00:00 hald-addon-acpi: listening on ac
    daemon    2647     1  0 13:58 ?        00:00:00 /usr/sbin/atd
    root      2672     1  0 13:58 ?        00:00:00 /usr/sbin/cron
    root      2691     1  0 13:58 tty1     00:00:00 /sbin/getty 38400 tty1
    root      2994  2442  0 14:11 ?        00:00:00 sshd: apple [priv]
    apple     3003  2994  0 14:11 ?        00:00:00 sshd: apple@pts/0
    apple     3004  3003  1 14:11 pts/0    00:00:00 -bash
    apple     3024  3004  0 14:11 pts/0    00:00:00 ps -ef
  apple@ubuntu:~$

    1.ps -p
    ps -p 根据给定的pid参数判断是否有这个进程,如果有这个进程正常退出,退出值0.如果没有这个进程异常退出,退出值1.

    例如:
    apple@ubuntu:~$ ps -p 2442
      PID TTY          TIME CMD
     2442 ?        00:00:00 sshd
    apple@ubuntu:~$ echo $?
    0

    apple@ubuntu:~$ ps -p 1234
      PID TTY          TIME CMD
    apple@ubuntu:~$ echo $?
    1
    apple@ubuntu:~$

    2.pgrep
    pgrep根据给出的进程名判断是否有这个名字的进程。如果有这个名字的进程正常退出,退出值0.如果没有这个名字的进程异常退出,退出值1.

    例如:
    apple@ubuntu:~$ pgrep sshd
    2442
    2994
    3003
    apple@ubuntu:~$ echo $?
    0

    apple@ubuntu:~$ pgrep sshddd
    apple@ubuntu:~$ echo $?
    1
    apple@ubuntu:~$

    3./proc
    每个进程都会在/proc下有一个以进程PID命名的目录。

    例如:
    apple@ubuntu:~$ ls /proc/2442
    ls: cannot read symbolic link /proc/2442/cwd: Permission denied
    ls: cannot read symbolic link /proc/2442/root: Permission denied
    ls: cannot read symbolic link /proc/2442/exe: Permission denied
    attr    clear_refs       cpuset   exe     io       loginuid  mountinfo   net        pagemap      sched      smaps  status   wchan
    auxv    cmdline          cwd      fd      latency  maps      mounts      oom_adj    personality  schedstat  stat   syscall
    cgroup  coredump_filter  environ  fdinfo  limits   mem       mountstats  oom_score  root         sessionid  statm  task
    apple@ubuntu:~$


    可以根据上面的事实,编写bash脚本判断一个进程是否存在。下面以第3个事实,编写脚本。其他的脚本类似。

    #!/bin/bash

    if [ -z $1 ]
    then
        echo "Need a pid argument"
        exit 1
    fi

    if [ -d /proc/$1 ];then
        exit 0
    else
        exit 1
    fi

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载