问题标签 [setsid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
469 浏览

linux - 在 posix_spawn() 创建的过程中调用 setsid()

这个问题是这个问题的后续。

当我发出 bash 命令时,posix_spawn()我收到以下消息:

bash:在这个 shell 中没有作业控制

我认为是因为在 fork 序列中有对该函数的调用,setsid()而我不知道如何在使用posix_spawn().

有没有办法为 bash 进程创建新会话?

0 投票
1 回答
10630 浏览

python - python中subprocess.Popen preexec_fn和start_new_session之间的区别

subprocess.Popen使用for python3.2+under启动新进程的这两个选项有什么区别Linux

我需要这个,因为我需要设置进程组 ID 以便有可能立即杀死该进程及其所有子进程。然后在进程运行时间超过某个阈值的情况下使用它:

我用这两个选项(#1& #2)测试了我的代码,它们似乎对我来说都可以正常工作。

但我想知道这里最好的选择是什么——一个 withpreexec_fn还是那个 with start_new_session

0 投票
1 回答
1004 浏览

linux - 为什么在 fork 之后调用 setid?

这是一个关于Praveen Gollakota在另一个问题中的回答的问题(这是我应该绕过评论特权的方式吗?)。

他对为什么分叉两次的问题的回答,本质上是为了确保分叉的进程不是会话负责人,因此无法获得 tty。他给出了这个fork过程的例子,并表明第二个孩子不是会话领导者(第二个fork之后的SID不是第二个孩子的PID)。

但是,您也可以在这里看到,在第一次分叉之后和“解耦”步骤之前(我假设这是对 的调用setsid()),孩子不是会话负责人。因此我的问题是为什么打电话setsid()?为什么不分叉一次并退出?

我的猜测是,这与会话负责人作为控制终端(或其他祖父母)有关。所以接下来的问题是,如果组长退出但会话组长还活着的进程会发生什么?

0 投票
3 回答
12614 浏览

python - 为什么在 Python 中使用 os.setsid()?

我知道 os.setsid() 是将进程(分叉)组 ID 更改为自身,但为什么我们需要它呢?

我可以从谷歌看到一些答案是:在父进程退出时保持子进程运行。

但是根据我下面的测试,如果没有 os.setsid() ,即使父进程退出(或被杀死),子进程也不会退出。那么为什么我们需要添加 os.setsid() 呢?谢谢。

0 投票
1 回答
1735 浏览

linux - setsid 不工作,给出错误

我想将脚本作为进程运行。所以在命令下运行,

但给出如下错误,

这里有什么问题?我在当前位置有具有执行权限的 test.sh 文件。

0 投票
1 回答
119 浏览

bash - 为什么此命令替换要等待后台作业完成?

我正在尝试使用命令替换来获取后台作业的 PID。后台作业以setsid. 问题是父进程在命令替换时受到打击。

这是一个示例脚本:

  • ./script start按预期工作(即,在后台作业运行时立即退出到 bash 提示符)。
  • setsid ./script start也可以按预期工作。
  • ./script不能按预期工作:它不打印 PID(除非后台作业被手动终止)。
0 投票
2 回答
470 浏览

linux - 查找通过setsid创建的进程组id

在一个 shell 脚本中,我看到使用 setsid,我们可以创建一个新的进程组。创建后我无法找到可靠的方法来获取组 ID。我的要求很简单,启动一个进程,完成后,清理任何后代(如果有的话)。我不想杀死主进程,因此我必须等待主进程结束。之后,如果我以某种方式获得了组 ID,我可以杀死剩余的子进程。这可以通过 kill -- -pgid 来完成。缺少的部分是我如何获得组 id ?

0 投票
0 回答
378 浏览

bash - 运行带有setsid的shell脚本错误

我用许多种子制作了 shell 脚本来运行我的任务。这是我的shell脚本

任务.sh

但是,第一个种子为 24 且 i=1 的进程已启动,而后续进程尚未启动。我认为原因可能在shell脚本中,它只支持一个一个运行进程。如何修复它以在后台运行所有进程?

0 投票
1 回答
42 浏览

linux - 为什么 setsid 不会启动我的任何可执行脚本?

我目前正在编写一个正在编写脚本然后执行它们的脚本。

运行父脚本的用户是 root 用户。

这是代码:

它本质上是为目录中的 $num 个项目做的,它在 /tmp 中生成 $num 个脚本。从此脚本在 /tmp 中创建的每个脚本都按预期工作。事实上,这个整体脚本有效。但是,当我从终端运行此父脚本时,它无法启动任何 /tmp/pulseVM$i.sh 可执行文件。

简而言之,这个脚本未能按预期执行第 19 行,我不知道为什么。

我期待这个父脚本会将这些子脚本分叉到后台。这样,这个父脚本可以在子脚本继续的同时结束。目前,没有执行子脚本。

这是一个示例 mainscript.txt:

请务必注意,.../VM$i 是一个共享文件夹,其中包含在该系统上运行的虚拟机。虚拟机在 root 下运行,由于虚拟机的用途,它始终需要 root 权限。