【发布时间】:2023-09-21 00:39:02
【问题描述】:
有没有一种方法可以查询 Linux 进程表中的进程状态,以便能够证明在执行查询时进程是正在运行还是被阻塞?我的目标是从进程或程序的“外部”执行此操作,因为我希望从操作系统进程的角度来理解这一点,但欢迎提出任何想法!
这里是python代码阻塞的过程:
import subprocess
proc = subprocess.call('ls -lRa /', shell=True)
这是一个非阻塞进程的python代码:
import subprocess
proc = subprocess.Popen('ls -lRa /', shell=True)
这是显示进程 ID 的“ps -ef”的输出:
UID PID PPID C STIME TTY TIME CMD
user1 14308 4145 0 15:30 pts/2 00:00:00 python call_b.py
user1 14309 14308 0 15:30 pts/2 00:00:00 /bin/sh -c ls -lRa /
user1 14310 14309 15 15:30 pts/2 00:00:30 ls -lRa /
root 14313 2 0 15:31 ? 00:00:00 [kworker/2:0]
user1 14318 2476 0 15:32 pts/4 00:00:00 -bash
user1 14442 1 0 15:33 pts/4 00:00:00 /bin/sh -c ls -lRa /
user1 14443 14442 6 15:33 pts/4 00:00:01 ls -lRa /
在处理这些“ls”命令时,我想显示哪些进程正在阻塞以及其他进程处于哪些状态。这个问题旨在成为一个工具,用于在我学习多处理时了解状态python,所以虽然我相信 PID 14309 是阻塞的,而 PID 14442 是非阻塞的,尽管我可能错了。这就是为什么能够查看或测试所有显示的 PID 对我很有帮助的原因。
感谢尊敬的用户“ubuntu”及其对此的回应: Blocking and Non Blocking subprocess calls 用于提供入门代码。
本例中的操作系统是 Ubuntu,但任何 debian 或操作系统注释都会有所帮助。
【问题讨论】:
标签: python linux process blocking nonblocking