如何在已知pid的其他bash中运行命令

时间:2018-02-19 16:00:01

标签: python bash shell subprocess pid

假设我有一个命令,我想在特定的bash中运行它,pid我知道。

例如,pid的{​​{1}}为bash。我希望在此100中使用ls运行bash之类的命令,其中我正在另一个pid = 100中使用bash执行自动化脚本。

这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

当然,有一些黑客允许你做一些看起来有点像它的东西(管道,expect等)。但主要答案是:不。

通常情况下的简单视图:当您启动ls之类的流程时,shell会执行forkexec。这意味着新流程是当前流程的子流。孩子将使用它自己的PID执行。举个例子:

pstree -p $$
bash(7695)─┬─pstree(13922)
           └─sleep(13899)

在这里,您可以看到我的shell(PID = 7695)和shell执行的sleep。你看到PID是不同的。它总是如此。它永远不会与另一个进程具有相同的PID。

所以,接下来的问题是你是否可以创建另一个进程(你的PID = 100 shell)fork& exec ls作为一个孩子(所以使用另一个PID)。答案通常是否定的,除非你为此做了一些规定(比如使用fifo并执行在fifo中转储的行。执行在fifo中转储的所有东西都有一些安全性,呃,让我们称之为挑战。

我的建议:不要去那里。重新评估这样做的原因。