![如何查找与给定进程相关的所有进程的PID?](https://linux22.com/image/222495/%E5%A6%82%E4%BD%95%E6%9F%A5%E6%89%BE%E4%B8%8E%E7%BB%99%E5%AE%9A%E8%BF%9B%E7%A8%8B%E7%9B%B8%E5%85%B3%E7%9A%84%E6%89%80%E6%9C%89%E8%BF%9B%E7%A8%8B%E7%9A%84PID%EF%BC%9F.png)
我怎样才能找到正在执行另一个进程工作的进程的 PID 或其他信息?kworker
例如,我正在谈论线程,或者在内核中为另一个进程执行工作的任何其他线程/进程。
我的困境是,我有一个实时调度进程(SCHED_FIFO)
以 sched prio 99 运行,CPU 关联性绑定到 CPU 0,但是当我将 CPU 压力注入到我的机器上时,我注意到我的重要 rt 进程无法抢占其他进程、非重要流程。我认为这可能是因为kworkers
即使我在taskset
和中指定了 -a 选项,但为这个重要进程工作的 不会继承主进程具有的优先级chrt
。我当前的想法是手动taskset
操作chrt
线程kworker
,这样它们就不会被其他非 RT 进程抢占。
答案1
如果您使用 知道启动进程的 PID,则可以获取进程启动的所有任务的树ps
。
$ ps f -g2305957
PID TTY STAT TIME COMMAND
2305957 pts/20 Ss 0:00 bash
2310399 pts/20 S+ 0:00 \_ stress -t 300 -c 16
2310400 pts/20 R+ 0:24 \_ stress -t 300 -c 16
2310401 pts/20 R+ 0:24 \_ stress -t 300 -c 16
2310402 pts/20 R+ 0:24 \_ stress -t 300 -c 16
2310403 pts/20 R+ 0:24 \_ stress -t 300 -c 16
2310404 pts/20 R+ 0:24 \_ stress -t 300 -c 16
2310405 pts/20 R+ 0:24 \_ stress -t 300 -c 16
2310406 pts/20 R+ 0:23 \_ stress -t 300 -c 16
2310407 pts/20 R+ 0:25 \_ stress -t 300 -c 16
2310408 pts/20 R+ 0:22 \_ stress -t 300 -c 16
2310409 pts/20 R+ 0:24 \_ stress -t 300 -c 16
2310410 pts/20 R+ 0:25 \_ stress -t 300 -c 16
2310411 pts/20 R+ 0:24 \_ stress -t 300 -c 16
2310412 pts/20 R+ 0:23 \_ stress -t 300 -c 16
2310413 pts/20 R+ 0:24 \_ stress -t 300 -c 16
2310414 pts/20 R+ 0:25 \_ stress -t 300 -c 16
2310415 pts/20 R+ 0:22 \_ stress -t 300 -c 16
这是stress
跨 16 个线程运行的。相关这个答案。
答案2
pstree -p -H <PID>
该命令向您显示系统的完整进程树以及所有 PID,并突出显示您的进程。
也许这有助于发现正在发生的事情。