【问题标题】:How to run a command in a different bash whose pid is already known如何在已知 pid 的不同 bash 中运行命令
【发布时间】:2018-02-19 16:00:00
【问题描述】:

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

例如pidbash100。我想在这个bashpid = 100 中运行类似ls 的命令,而我在另一个bashpid = 101 中执行自动化脚本。

这可能吗?

【问题讨论】:

  • 为什么要使用不同的父进程运行进程(不,你不能)?你想达到什么目的?这和python有什么关系?
  • 我相信您的问题在这里得到了解决:stackoverflow.com/questions/5998126/…
  • @cdarke:这是要求。我们的源代码控制 ade get 在具有不同 pid 的新 bash 中执行。我想编写一个自动化脚本,在进入源代码控制 bash 后将运行一些其他命令。这可能吗?
  • 这取决于bash 会话的类型以及after 的含义。有一些启动文件:.bashrc是在一个新的interactivebash shell进入时执行的,一个non-interactive shell会执行一个在变量@987654336中指定的文件@,您应该 export 让您的广告看到它。您将不得不尝试查看 shell 是交互式的还是非交互式的。
  • 假设我的命令如下: 1) ade useview view_name 2) ade pwv 执行命令一将打开它自己的 bash。如果我将上述命令放在一个 .sh 文件中并尝试执行它,命令 2 在我执行脚本的 shell 中运行,但不在命令 1 创建的 shell 中运行。如何在命令 1 创建的 shell 中运行命令 2 ?

标签: python bash shell subprocess pid


【解决方案1】:

当然,有一些技巧可以让你做一些看起来有点像它的事情(管道、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 中的所有内容都有一定的安全性,嗯,我们称之为挑战。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多