Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在linux上使用BASH中的新进程组id生成进程_Linux_Unix - Fatal编程技术网

如何在linux上使用BASH中的新进程组id生成进程

如何在linux上使用BASH中的新进程组id生成进程,linux,unix,Linux,Unix,有谁能告诉我,如何在linux上使用BASH unix shell中的新进程组id生成新进程? 非常感谢你 要在新进程组中从命令提示符以交互方式运行命令,如“emacs xxx.txt”: setsid emacs xxx.txt & 正如链接的“linux命令setsid”中所描述的,setsid命令的行为可能令人惊讶(在我刚才使用的linux中,manpage根本没有帮助)。所以 如果要从脚本中生成命令,并在脚本退出后继续执行该命令,请将setId加倍: setsid setsid

有谁能告诉我,如何在linux上使用BASH unix shell中的新进程组id生成新进程? 非常感谢你

要在新进程组中从命令提示符以交互方式运行命令,如“emacs xxx.txt”:

setsid emacs xxx.txt &
正如链接的“linux命令setsid”中所描述的,setsid命令的行为可能令人惊讶(在我刚才使用的linux中,manpage根本没有帮助)。所以

如果要从脚本中生成命令,并在脚本退出后继续执行该命令,请将setId加倍:

setsid setsid emacs xxx.txt
。。。理由是:

  • 当bash在脚本期间调用setsid时,setsid保留bash解释器进程的进程组id,因此:

    setsid emacs xxx.txt

    。。。块(请参阅链接文章)。但在运行emacs之前,它确实设置了一个新的进程组

  • 您可以使用“&”作为背景:

    setsid emacs xxx.txt&

    。。。但这样会留下一个竞争条件,在后台进程到达setsid更改进程组的点之前,调用脚本可能会退出(这可能会杀死子进程)

  • 因此,我们希望等待过程组更改的发生;由于 外部集合id不是流程组长,并且已由外部集合id设置了新的流程组id
即当我们将setsid加倍时,顺序为:

  • bash分叉子1,将其留在bash的进程组中
  • 子1 execs setId
  • 子1 setsid看到它不是组长,因此调用setsid系统调用 (创建新会话并为子进程1提供新进程组) 然后执行内部设置ID
  • 内部setsid看到它是一个组长,所以分叉子2,子1 出口
  • 子2看到它不是组长,所以调用setsid系统调用(创建 一个新的会话,并给子进程2一个新的进程组),然后执行 emacs
  • 在脚本中的中,如果希望与命令通信并等待它退出,请参阅bash手册页中的子流程。

    可能重复的