【发布时间】:2010-12-21 18:27:06
【问题描述】:
如何使用 Bash 脚本中的进程名称检查 Mac OS X 上的进程是否正在运行?
我正在尝试编写一个 Bash 脚本,如果进程停止,它将重新启动它,但如果它仍在运行,则什么也不做。
【问题讨论】:
-
我正在将“unix”添加到标签列表中,因为这个问题实际上并没有特定于 mac 的内容......(留下“mac”,所以特定于 mac 的人也会找到它......)
-
顺便说一句,如果你在 OS X 上创建一个类似守护进程的进程,你应该看看
launchd,Apple 替代了cron、init、inetd等。它有许多选项可以在各种上下文和时间启动和重新启动进程。有关各种文档和教程,请参阅man launchd、man launchd.plist和 google。 -
谢谢内德。我实际上使用 Lingon 作为
launchd的用户友好界面。 -
布赖恩,你错了一半。 Mac OS X 是基于 BSD 的,并且在涉及到这一点的许多命令中具有略微不同的语义。不过,并不是说我认为 Linux 标记不合适。
-
我必须在同一个系统(构建系统)中为 Mac OS X、OpenBSD、各种 Linux'es、AIX、Solaris 和 Cygwin 解决这个问题。最终使用带有临时文件和进程监控的两阶段锁定变得更容易,而不仅仅是进程监控(例如单独的“ps”)。不过,这并不是您问题的真正答案,但请考虑它是一般性建议。最大的麻烦之一是(尤其是在 Mac OS X 中)ps 参数会随着操作系统的不同版本而变化。