当前位置: 首页 > 面试题库 >

Linux / Unix命令以确定进程是否正在运行?

岳彬炳
2023-03-14
问题内容

我需要一个独立于平台的(Linux / Unix | OSX)shell /
bash命令,该命令将确定特定进程是否正在运行。例如mysqldhttpd…最简单的方法/命令是什么?


问题答案:

尽管pidofpgrep是确定正在运行的工具的绝佳工具,但不幸的是,它们在某些操作系统上均不可用。确定的故障保护将使用以下内容:ps cax | grep command

Gentoo Linux上的输出:

14484?S 0:00 apache2
14667吗?S 0:00 apache2
19620?SL 0:00 apache2
21132?SS 0:04 apache2

OS X上的输出:

42582 ?? Z 0:00.00(smbclient)
46529 ?? Z 0:00.00(smbclient)
46539 ?? Z 0:00.00(smbclient)
46547 ?? Z 0:00.00(smbclient)
46586 ?? Z 0:00.00(smbclient)
46594 ?? Z 0:00.00(smbclient)

在Linux和OS X上,grep都会返回退出代码,因此很容易检查是否找到了该进程:

#!/bin/bash
ps cax | grep httpd > /dev/null
if [ $? -eq 0 ]; then
  echo "Process is running."
else
  echo "Process is not running."
fi

此外,如果您想要PID的列表,也可以轻松地对这些ID进行grep:

ps cax | grep httpd | grep -o'^ [] * [0-9] *'

在Linux和OS X上,其输出相同:

3519 3521 3523 3524

以下内容的输出为空字符串,使该方法对于未运行的进程而言是安全的:

回声 ps cax | grep aasdfasdf | grep -o '^[ ]*[0-9]*'

这种方法适用于编写简单的空字符串测试,然后甚至遍历发现的PID。

#!/bin/bash
PROCESS=$1
PIDS=`ps cax | grep $PROCESS | grep -o '^[ ]*[0-9]*'`
if [ -z "$PIDS" ]; then
  echo "Process not running." 1>&2
  exit 1
else
  for PID in $PIDS; do
    echo $PID
  done
fi

您可以通过将其保存到具有执行许可权(chmod + x running)的文件(名为“ running”)中并使用以下参数来对其进行测试:
./running "httpd"

#!/bin/bash
ps cax | grep httpd
if [ $? -eq 0 ]; then
  echo "Process is running."
else
  echo "Process is not running."
fi

警告!!!

请记住,您只是在解析输出,ps ax这意味着从Linux输出中可以看出,它不仅与进程匹配,而且还传递给该程序的参数。我强烈建议在使用此方法时尽可能具体(例如./running "mysql"也将匹配“ mysqld”进程)。我强烈建议which在可能的情况下使用来检查完整路径。

参考文献:

http://linux.about.com/od/commands/l/blcmdl1_ps.htm

http://linux.about.com/od/commands/l/blcmdl1_grep.htm



 类似资料:
  • 问题内容: 查找进程aa.sh是否正在运行的linux命令是什么。ps命令似乎不起作用,并且不显示Shell脚本名称。 请指教。 问题答案: 检查一下

  • 问题内容: 在C语言中,如何以编程方式找出Linux / Ubuntu上是否已在运行某个进程,以避免该进程两次启动?我正在寻找类似于pidof的东西。 问题答案: 您可以进入这些条目并在文件中检查过程,也可以在链接上执行操作(以下使用第一种方法)。

  • ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。 ps 命令有多种不同的使用方法,这常常给初学者带来困惑。在各种 Linux 论坛上,询问 ps 命令语法的帖子屡见不鲜,而出现这样的情况,还要归咎于 UNIX 悠久的历史和庞大的派系。在不同的 Linux 发行版上,ps 命令的语法各不相同,为此,Linux 采取了一个折中的方法,即融合各种不同的风格,兼顾那些已

  • 问题内容: 给定XX的进程iD,我想有一个任何窗口ID的列表,其中_NET_WM_PID = XX。如果可能的话,最好的办法是最旧的仍处于活动状态的窗口ID。 我对linux还是很陌生,但是我想做的是创建一个使用命令行的脚本,并查看是否有一个窗口已经打开,该窗口属于使用同一命令行调用的进程。如果是这样,只需将焦点设置在该窗口上,否则执行命令行以进行新的处理。我的意图是在我的ubuntu桌面上使用此

  • 问题内容: 在SunOS上,有一条命令可以打印传递给正在运行的进程的命令行参数。 在其他Unix环境中是否有任何类似的命令? 问题答案: 有几种选择: 在Linux上有更多信息,请看一看。 在其他Unix上,情况可能有所不同。该命令将随处可见,具体内容取决于操作系统。例如,在AIX上没有in 。

  • 我创建了一个shell脚本,用于执行系统升级。 在终端屏幕上,我们只想打印几条消息来通知用户更新的进度。 部分更新创建文件夹的tar文件以供备份-但当tar命令运行时,它会在屏幕上列出当前正在压缩的所有文件和文件夹-是否可以停止此信息出现在终端屏幕上?