问题标签 [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 - 为什么当我注销时我的守护进程没有终止?
我正在阅读有关 Linux 进程组和会话的信息。从这个网站我看到:
当用户退出系统时,内核需要终止用户运行的所有进程……为了简化这个任务,进程被组织成会话集。会话的 ID 与通过 setsid() 系统调用创建会话的进程的 pid 相同。该进程称为该会话组的会话负责人。然后,该进程的所有后代都是该会话的成员,除非他们专门从该会话中删除自己。setsid() 函数不接受任何参数并返回新的会话 ID。
这篇文章没有说的是操作系统何时决定终止用户的会话。我最初的假设是,当有人登录 TTY 时,TTY 是会话领导者,并且在该会话中调用的所有进程都属于它,除非他们调用setsid()
. 然而,正如最简单的例子所证实的那样,这显然是错误的。考虑一下这个“守护进程”......(我知道它不是真正的守护进程,但它确实分叉)......
从代码中,我们看到子进程不断地写入文件,而父进程退出。请注意,我从不打电话给setsid()
.
如果我登录,运行守护程序,然后注销,然后登录,守护程序仍在运行!我可以删除对的调用,fork()
并且正如预期的那样,当我注销时该过程终止。谁能解释为什么 fork 导致我注销时应用程序不退出?
linux - 为什么setsid 不能从shell 脚本中退出?
'test1.sh' shell 脚本不会立即退出。
'test2.sh' shell 脚本将立即退出。
谁能为我解释一下?非常感谢。
linux - 如何终止setsid初始化的守护进程?
我使用 setsid 命令启动一个进程(一个 websocket 服务器):
但是我怎么能阻止它呢?我确定它现在正在运行,只是不知道如何获取 pid 并杀死它。
linux - 使用 gdb 调试进程并关闭终端
我的应用程序中有一个在远程服务器上运行的错误。执行几个小时后,应用程序获得一个 SIGSEGV 并终止。
我想通过 ssh 使用 gdb 调试我的远程应用程序,因此当程序获取 SIGSEGV 时,gdb 将停止并允许我查看发生了什么,但我无法将 ssh 会话留给连接的服务器。我正在尝试运行:
但是当我关闭 ssh 终端时,gdb 和我的应用程序会立即终止。
我的问题:
- 关闭终端时如何让 gdb 运行
- 以后如何重新连接?
strace
在关闭终端的那一刻在 gdb 上显示:
linux - Linux:在setsid之后将脚本附加到控制终端
如果我通过命令运行 Bash 脚本setsid
,它的控制终端将不会连接到任何设备(它将显示为“?”)。pts
有没有办法从 shell 脚本将控制终端重新连接到某个免费设备。
在其控制终端分离后,我是否能够使用stdin
并stdout
在脚本中运行 via ?setsid
node.js - Nodejs setsid() 等效
我正在尝试在 nodejs 中执行一个 bash shell - 除了作业控制之外,我一直在工作。我很确定这是因为生成的进程没有被设置为进程负责人。在 C 中,我可以通过调用 setsid() 来做到这一点。在 nodejs 中,我读到在生成新进程时设置选项“setsid:true”。我这样做是这样的:
但是我仍然收到消息“在这个 shell 中没有作业控制”。
分配 pty ttys002 后的示例输出:
总而言之,我的问题是:
- 这是设置新进程会话 ID 的正确方法吗?如果是这样,我如何明确检查它实际上是否正确地执行了该操作(在我看来,事实并非如此 - 这是我想象的唯一会导致没有工作控制的事情,因为 tty 命令是证据表明pty 设置正确)。
- 如果此方法不起作用,是否有任何不涉及下载模块的 setsid() 替代方法?如果没有,我将编写一个 c++ 插件。
谢谢你的帮助!
linux - bash setid nohup ./prog & -- $! 不指向子进程
我试图获取我运行的进程的 pid,setsid
它应该像这样在后台运行:
如果我运行./test.sh
它将打印一个my_program
进程的pid,这正是我所需要的。但是,如果像这样在我的 shell 中一个一个地运行这个命令:
它会给我一个setsid
命令的pid(或者可能是别的东西,但它几乎总是给我my_program
一个负一的pid)。
这里发生了什么?为什么我自己在终端中运行的命令结果与test.sh
脚本的结果不同?
顺便说一句,您可能知道我从 setid 开始并且需要在后台运行的一些简单的过程方法吗?
perl - 使用 setsid 运行脚本时在 perl 中处理 ctrl + c
我的 Perl 脚本看起来像这样
A.pl
ctrlc.pl
当我运行perl A.pl
并按 Ctrl-C 时,它正在检测并打印“Niraj”。但是当我运行时setsid perl A.pl
,它没有检测到 Ctrl-C。
linux - 有没有办法判断一个进程是否是一个子进程,如果它确实 fork 然后 setid
如果一个进程做了fork
然后孩子做了setsid
,有没有办法告诉它是第一个进程的孩子?有什么办法可以杀死这样的进程及其父进程?
node.js - 停止由 setsid Debian 8 启动的进程
我运行了一个 js 脚本使用
而且我不知道如何停止脚本。
我读过类似的文章,但我只是不理解它们,因为我对 Linux 还很陌生。