问题标签 [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 回答
471 浏览

linux - 为什么当我注销时我的守护进程没有终止?

我正在阅读有关 Linux 进程组和会话的信息。从这个网站我看到:

当用户退出系统时,内核需要终止用户运行的所有进程……为了简化这个任务,进程被组织成会话集。会话的 ID 与通过 setsid() 系统调用创建会话的进程的 pid 相同。该进程称为该会话组的会话负责人。然后,该进程的所有后代都是该会话的成员,除非他们专门从该会话中删除自己。setsid() 函数不接受任何参数并返回新的会话 ID。

这篇文章没有说的是操作系统何时决定终止用户的会话。我最初的假设是,当有人登录 TTY 时,TTY 是会话领导者,并且在该会话中调用的所有进程都属于它,除非他们调用setsid(). 然而,正如最简单的例子所证实的那样,这显然是错误的。考虑一下这个“守护进程”......(我知道它不是真正的守护进程,但它确实分叉)......

从代码中,我们看到子进程不断地写入文件,而父进程退出。请注意,我从不打电话给setsid().

如果我登录,运行守护程序,然后注销,然后登录,守护程序仍在运行!我可以删除对的调用,fork()并且正如预期的那样,当我注销时该过程终止。谁能解释为什么 fork 导致我注销时应用程序不退出?

0 投票
2 回答
1734 浏览

linux - 为什么setsid 不能从shell 脚本中退出?

'test1.sh' shell 脚本不会立即退出。

'test2.sh' shell 脚本将立即退出。

谁能为我解释一下?非常感谢。

0 投票
1 回答
971 浏览

linux - 如何终止setsid初始化的守护进程?

我使用 setsid 命令启动一个进程(一个 websocket 服务器):

但是我怎么能阻止它呢?我确定它现在正在运行,只是不知道如何获取 pid 并杀死它。

0 投票
2 回答
532 浏览

linux - 使用 gdb 调试进程并关闭终端

我的应用程序中有一个在远程服务器上运行的错误。执行几个小时后,应用程序获得一个 SIGSEGV 并终止。

我想通过 ssh 使用 gdb 调试我的远程应用程序,因此当程序获取 SIGSEGV 时,gdb 将停止并允许我查看发生了什么,但我无法将 ssh 会话留给连接的服务器。我正在尝试运行:

但是当我关闭 ssh 终端时,gdb 和我的应用程序会立即终止。

我的问题:

  • 关闭终端时如何让 gdb 运行
  • 以后如何重新连接?

strace在关闭终端的那一刻在 gdb 上显示:

0 投票
0 回答
736 浏览

linux - Linux:在setsid之后将脚本附加到控制终端

如果我通过命令运行 Bash 脚本setsid,它的控制终端将不会连接到任何设备(它将显示为“?”)。pts有没有办法从 shell 脚本将控制终端重新连接到某个免费设备。

在其控制终端分离后,我是否能够使用stdinstdout在脚本中运行 via ?setsid

0 投票
1 回答
618 浏览

node.js - Nodejs setsid() 等效

我正在尝试在 nodejs 中执行一个 bash shell - 除了作业控制之外,我一直在工作。我很确定这是因为生成的进程没有被设置为进程负责人。在 C 中,我可以通过调用 setsid() 来做到这一点。在 nodejs 中,我读到在生成新进程时设置选项“setsid:true”。我这样做是这样的:

但是我仍然收到消息“在这个 shell 中没有作业控制”。
分配 pty ttys002 后的示例输出:

总而言之,我的问题是:
- 这是设置新进程会话 ID 的正确方法吗?如果是这样,我如何明确检查它实际上是否正确地执行了该操作(在我看来,事实并非如此 - 这是我想象的唯一会导致没有工作控制的事情,因为 tty 命令是证据表明pty 设置正确)。
- 如果此方法不起作用,是否有任何不涉及下载模块的 setsid() 替代方法?如果没有,我将编写一个 c++ 插件。
谢谢你的帮助!

0 投票
2 回答
2182 浏览

linux - bash setid nohup ./prog & -- $! 不指向子进程

我试图获取我运行的进程的 pid,setsid它应该像这样在后台运行:

如果我运行./test.sh它将打印一个my_program进程的pid,这正是我所需要的。但是,如果像这样在我的 shell 中一个一个地运行这个命令:

它会给我一个setsid命令的pid(或者可能是别的东西,但它几乎总是给我my_program一个负一的pid)。

这里发生了什么?为什么我自己在终端中运行的命令结果与test.sh脚本的结果不同?

顺便说一句,您可能知道我从 setid 开始并且需要在后台运行的一些简单的过程方法吗?

0 投票
2 回答
327 浏览

perl - 使用 setsid 运行脚本时在 perl 中处理 ctrl + c

我的 Perl 脚本看起来像这样

A.pl

ctrlc.pl

当我运行perl A.pl并按 Ctrl-C 时,它正在检测并打印“Niraj”。但是当我运行时setsid perl A.pl,它没有检测到 Ctrl-C。

0 投票
1 回答
75 浏览

linux - 有没有办法判断一个进程是否是一个子进程,如果它确实 fork 然后 setid

如果一个进程做了fork然后孩子做了setsid,有没有办法告诉它是第一个进程的孩子?有什么办法可以杀死这样的进程及其父进程?

0 投票
0 回答
1238 浏览

node.js - 停止由 setsid Debian 8 启动的进程

我运行了一个 js 脚本使用

而且我不知道如何停止脚本。

我读过类似的文章,但我只是不理解它们,因为我对 Linux 还很陌生。