【问题标题】:ps aux | grep x returns two root instancesps辅助| grep x 返回两个根实例
【发布时间】:2014-08-22 22:16:24
【问题描述】:

我有一个使用 cron @reboot 在重启时启动的 python 脚本。当我使用ps aux | grep x.py 时,它返回两个根实例和一个用户(在本例中用户是 pi)实例。

这是个问题吗?如何确保只有一个实例?

示例: 根 2317 0.0 0.3 4584 1484 pts/0 S+ 0.00 sudo python /home/pi/Twitter.py 根 2318 36.5 3. 7 52072 16952 pts/0 S1+ 4.26 python /home/pi/Twitter.py

【问题讨论】:

  • 试试ps aux | grep [x].py
  • 这不清楚。你能显示相关的输出吗?
  • 你可能想看看pgrep
  • 感谢您的回复。这适用于摆脱用户实例(与自身匹配的 grep 实例)问题实际上是另外一回事。当脚本运行时,它似乎运行了两个根实例。第一个命令从 sudo python x.py 运行,第二个命令只是 python x.py 有趣的是,sudo python 版本运行的时间是 0:00,而 python 版本一直在运行。我在上面的问题中添加了一个示例

标签: python unix cron raspberry-pi ps


【解决方案1】:

您获得两个实例的原因是 grep 可以同时看到 x.pygrep x.py 进程。

最好的方法是使用pgrep x.py,或者你可以使用使你的grep表达式不匹配自身的技巧,例如ps -aux | grep [x].py

WRT 你的后续 cmets:当你运行 sudo 时会发生什么,它会创建另一个进程。 ps 显示了这个过程和 sudo 因为它们都有你在他们的参数列表中搜索的字符串。

如果您查看 ps 的输出,您应该会看到如下内容:

0 62379   445   0  9:48pm ttys003    0:00.02 sudo x.py
0 62383 62379   0  9:48pm ttys003    0:00.01 x.py

请注意,sudo 的进程 ID 为 62379,而 x.py 的父进程 ID 为 62379,这表明它是由 sudo 启动的。 sudo 进程只是坐在那里等待其子进程完成。它不会对您的计算机性能产生任何重大影响。

我想可能有几种方法可以从列表中排除 sudo 进程。我能想到的最简单的是:

ps -eaf | grep [x].py | grep -v sudo

【讨论】:

  • 感谢您的回复。这适用于摆脱用户实例(与自身匹配的 grep 实例)问题实际上是其他问题。当脚本运行时,它似乎运行了两个根实例。第一个命令从 sudo python x.py 运行,第二个命令只是 python x.py 有趣的是,sudo python 版本运行的时间是 0:00,而 python 版本一直在运行。我在上面的问题中添加了一个示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多