python - Linux/Bash 使用 PS -f 获取特定 PID 的返回格式与 PS -f 不同,也有关于使用 Grep 解析此问题的问题

标签 python linux bash command-line pid

对于我正在创建的 python 脚本,我需要先获取进程的 PID(基于其名称),然后使用其 PID、持续时间从该进程获取,从下面的打印输出中,将是“00:00:00”

root      5686     1  0 Sep23 ?        00:00:00 process-name

我正在使用它通过进程名称获取 PID:

ps -ef |grep `whoami`| grep process-name | cut -c10-15

所以,这工作正常,我假设剪切参数 (-c10-15) 将普遍工作,因为 PID 的位置不应该改变(我刚从我找到的片段中得到这个)

但是,当我尝试做类似的事情以仅获取 TIME 值时,例如它以不同的方式返回它

ps -f 5686

返回:

root      5686     1  0 Sep23 ?        S      0:00 /path/to/process

因此,当我尝试如下所示进行剪切时,我认为它无法正常工作,因为我不确定此返回的间距是否一致,而且它显示的时间值与以前不同(不是原来的“00:00:00"样式的打印输出。

ps -f 5686 | cut -c40-47

我在我的 python 脚本中使用它来记录特定进程类型的 PID(按名称),以便我以后可以在需要时关闭该程序实例。感谢任何关于我可以做些什么来纠正我的方法的建议

最佳答案

使用 -o 选项控制输出哪些数据以及以什么顺序输出。

例如

$ ps -o pid,time,comm
  PID     TIME COMMAND
 3029 00:00:01 zsh
22046 00:00:00 ps

$ ps -o pid,time,comm --no-headers
 3029 00:00:01 zsh
22046 00:00:00 ps

这将使它更容易解析。我建议使用 (pid, time, cmd) = result.split(2)

用 python 解析输出

或者使用 pgrep 命令仅列出符合给定条件的进程。

关于python - Linux/Bash 使用 PS -f 获取特定 PID 的返回格式与 PS -f 不同,也有关于使用 Grep 解析此问题的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3785768/

相关文章:

python - scrapy如何使用规则?

python - Django 单元测试断言错误

python - 在 python 中使用 smtplib 时出错

c++ - 从 Ubuntu 运行一个可执行文件到 Debian

linux - 如何确保 Node 以用户身份运行?

linux - 自动将一堆命令转换为 command1 && command2

linux - bash while in while in while using variable_variable 操作

python - 在嵌入式终端中发出命令

linux - 如何替换文件名中的字符串

bash - 用于截断大文件的 Unix shell 脚本