问题标签 [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.
linux - 在 posix_spawn() 创建的过程中调用 setsid()
这个问题是这个问题的后续。
当我发出 bash 命令时,posix_spawn()
我收到以下消息:
bash:在这个 shell 中没有作业控制
我认为是因为在 fork 序列中有对该函数的调用,setsid()
而我不知道如何在使用posix_spawn()
.
有没有办法为 bash 进程创建新会话?
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
?
linux - 为什么在 fork 之后调用 setid?
这是一个关于Praveen Gollakota在另一个问题中的回答的问题(这是我应该绕过评论特权的方式吗?)。
他对为什么分叉两次的问题的回答,本质上是为了确保分叉的进程不是会话负责人,因此无法获得 tty。他给出了这个fork过程的例子,并表明第二个孩子不是会话领导者(第二个fork之后的SID不是第二个孩子的PID)。
但是,您也可以在这里看到,在第一次分叉之后和“解耦”步骤之前(我假设这是对 的调用setsid()
),孩子不是会话负责人。因此我的问题是为什么打电话setsid()
?为什么不分叉一次并退出?
我的猜测是,这与会话负责人作为控制终端(或其他祖父母)有关。所以接下来的问题是,如果组长退出但会话组长还活着的进程会发生什么?
python - 为什么在 Python 中使用 os.setsid()?
我知道 os.setsid() 是将进程(分叉)组 ID 更改为自身,但为什么我们需要它呢?
我可以从谷歌看到一些答案是:在父进程退出时保持子进程运行。
但是根据我下面的测试,如果没有 os.setsid() ,即使父进程退出(或被杀死),子进程也不会退出。那么为什么我们需要添加 os.setsid() 呢?谢谢。
linux - setsid 不工作,给出错误
我想将脚本作为进程运行。所以在命令下运行,
但给出如下错误,
这里有什么问题?我在当前位置有具有执行权限的 test.sh 文件。
bash - 为什么此命令替换要等待后台作业完成?
我正在尝试使用命令替换来获取后台作业的 PID。后台作业以setsid
. 问题是父进程在命令替换时受到打击。
这是一个示例脚本:
./script start
按预期工作(即,在后台作业运行时立即退出到 bash 提示符)。setsid ./script start
也可以按预期工作。- 但
./script
不能按预期工作:它不打印 PID(除非后台作业被手动终止)。
linux - 查找通过setsid创建的进程组id
在一个 shell 脚本中,我看到使用 setsid,我们可以创建一个新的进程组。创建后我无法找到可靠的方法来获取组 ID。我的要求很简单,启动一个进程,完成后,清理任何后代(如果有的话)。我不想杀死主进程,因此我必须等待主进程结束。之后,如果我以某种方式获得了组 ID,我可以杀死剩余的子进程。这可以通过 kill -- -pgid 来完成。缺少的部分是我如何获得组 id ?
bash - 运行带有setsid的shell脚本错误
我用许多种子制作了 shell 脚本来运行我的任务。这是我的shell脚本
任务.sh
但是,第一个种子为 24 且 i=1 的进程已启动,而后续进程尚未启动。我认为原因可能在shell脚本中,它只支持一个一个运行进程。如何修复它以在后台运行所有进程?
linux - 为什么 setsid 不会启动我的任何可执行脚本?
我目前正在编写一个正在编写脚本然后执行它们的脚本。
运行父脚本的用户是 root 用户。
这是代码:
它本质上是为目录中的 $num 个项目做的,它在 /tmp 中生成 $num 个脚本。从此脚本在 /tmp 中创建的每个脚本都按预期工作。事实上,这个整体脚本有效。但是,当我从终端运行此父脚本时,它无法启动任何 /tmp/pulseVM$i.sh 可执行文件。
简而言之,这个脚本未能按预期执行第 19 行,我不知道为什么。
我期待这个父脚本会将这些子脚本分叉到后台。这样,这个父脚本可以在子脚本继续的同时结束。目前,没有执行子脚本。
这是一个示例 mainscript.txt:
请务必注意,.../VM$i 是一个共享文件夹,其中包含在该系统上运行的虚拟机。虚拟机在 root 下运行,由于虚拟机的用途,它始终需要 root 权限。