我试过man(3)setsid,但它只解释了如何使用它,我不太明白setsid什么时候有用? 最佳答案 session是共享一个控制终端的一组进程。当你想开始一个新的session时,setsid很有用,因为你已经开始连接到一个新的终端——比如在终端模拟器中启动一个shell时——或者你想要一个守护进程(你不想与控制终端相关联)。我所知道的关于这些方面的最好解释是R.W.StevensUnix环境中的高级编程。 关于c-setsid()什么时候有用,或者为什么我们需要在Linux中对进程
我试过man(3)setsid,但它只解释了如何使用它,我不太明白setsid什么时候有用? 最佳答案 session是共享一个控制终端的一组进程。当你想开始一个新的session时,setsid很有用,因为你已经开始连接到一个新的终端——比如在终端模拟器中启动一个shell时——或者你想要一个守护进程(你不想与控制终端相关联)。我所知道的关于这些方面的最好解释是R.W.StevensUnix环境中的高级编程。 关于c-setsid()什么时候有用,或者为什么我们需要在Linux中对进程
此问题是thisquestion的后续问题.当posix_spawn()发出bash命令时,我收到消息:bash:nojobcontrolinthisshell我认为是因为在fork序列中调用了函数setsid()而我不知道如何在使用posix_spawn()时模拟此操作.有没有办法为bash进程创建新session? 最佳答案 你不能。它不是当前posix_spawn接口(interface)的一部分。添加它已在http://austingroupbugs.net/view.php?id=1044中讨论过并且显然至少有一个实现(Q
为什么在setsid()之前使用fork()来守护进程?基本上,如果我想将一个进程与其控制终端分离并使其成为进程组领导:我使用setsid()。在没有fork的情况下这样做是行不通的。为什么? 最佳答案 首先:setsid()将使您的进程成为进程组的领导者,但它也会使您成为新session的领导者。如果您只是对获取自己的进程组感兴趣,请使用setpgid(0,0)。现在要了解如果您已经是进程组负责人或session负责人,setsid()返回EPERM的实际原因,您必须了解进程组和sessionid是从创建它们的进程的进程id初始化
在Ruby中,如果以非super用户身份运行,对Process.setsid的调用将失败并显示“不允许操作”错误。尝试:$irbirb(main):001:0>Process.setsidErrno::EPERM:Operationnotpermittedfrom(irb):1:in`setsid'from(irb):1from~/.rbenv/versions/1.9.2-p290/bin/irb:12:in`'或者,如果我使用Process.uid=方法更改uid或进程,它会失败并出现相同的错误。如果我以root身份运行Ruby程序,它可以正常工作,并且我不会在运行时更改进程的UI