【问题标题】:PS command does not show running processPS 命令不显示正在运行的进程
【发布时间】:2016-11-09 13:11:33
【问题描述】:

我的 shell 脚本运行时间很长(运行时间超过 24 小时)。 这是一个非常简单的脚本。它只是从目录中读取 xml 文件并对文件内容执行sed 操作。目录中有 100 万个 xml 文件。

我的脚本名称类似于 runDataManipulation.sh

当我运行以下命令时

ps -ef | grep "runDa*"

然后有时我会看到我的过程

username 34535 1 48 11:42:01  - 224:22 /usr/bin/ksh ./runDataManipulation.sh 

但如果我在几秒钟后运行完全相同的命令,那么我根本看不到上述过程。

由于我的进程一直在运行,所以我希望 ps 命令始终显示该进程。

如果我在脚本的进程 ID 上执行 grep,例如 ..

ps -ef | grep 34535

然后有时我会看到类似的结果

username 34535 1 51 11:42:01  - 229:22 [ksh]

有时我会看到类似的结果

username 45678 34535 0 14:12:11  - 0:0 [sed]

我的主要问题是......当我使用脚本名称为我的进程grep 时,为什么我看不到我的进程。我正在使用AIX 6.1

【问题讨论】:

  • 查看runDataManipulation.sh 脚本的内容会很有用,因为它必须做一些事情来改变它的进程列表。值得注意的是,在 AIX 上,您可以修改 *argv[] 的内容(用 C 语言),您的更改将反映在进程列表中。并非所有 Unix 操作系统都允许这样做。

标签: shell unix sed ksh ps


【解决方案1】:

在我看来,一个脚本正在另一个进程中生成您的脚本。

如果您查看 ps 命令的结果,第一行下方显示的进程 ID 为 34535,这是主 ID(例如父 ID)。

用户名 34535 1 51 11:42:01 - 229:22 [ksh]

这个进程又在触发另一个进程,这可以在下面看到,注意下面一行提到了父进程(34535)的id,第一个数字是主进程id,第二个数字是调用过程。

用户名 45678 34535

如果您将 ps 命令更改为包含 sed 命令,并且您的脚本仍在运行,您应该总是会看到一些结果!

【讨论】:

  • 谢谢。我完全理解我的脚本为 sed 命令生成了一个新进程,新的 sed 进程将有一个新的 pid,它的 ppid(父 pid)将有我的主脚本 pid(34535)。但是我的父进程在生成新进程时不会死亡,所以我总是希望我的主进程(runDataManipulation.sh)出现在 ps -ef 输出中。那是我的主要问题。,为什么我的父进程仍在运行时没有出现在 ps -ef 命令输出中。
猜你喜欢
  • 2013-09-08
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多