找到进程的所有者shell

时间:2014-01-04 18:31:59

标签: bash shell nohup

如何找到一个进程归哪个shell所有?

这是有用的,因为我有一个服务器有多个登录用户和一些长时间运行的进程,我想知道哪些用户可以强制注销而不停止他们的已启动作业。

ps的输出报告了一个TTY,但即使在取消作业后也没有用,它的TTY保持不变。那么如何判断用户disown / nohup是否已启动其启动过程?

1 个答案:

答案 0 :(得分:3)

你所描述的意义上找不到“所有者外壳”,因为没有这样的东西。您可以找到父进程,它可能是一个shell;但是你无法知道shell是否放弃了这个工作,因为那个操作纯粹是shell内部的。

您应该做的是指导您的用户在ScreenTmux内启动长时间运行的程序。这些程序有点复杂,但基本用途很简单。

  • 通过运行命令screen启动屏幕会话。
  • 您可以在该会话中运行命令,即使您已注销,它们也会继续运行。
  • 如果要使用仍在运行的命令注销,请通过键入 Ctrl + A D 断开与屏幕会话的连接。
  • 要重新连接到现有的屏幕会话,请运行screen -rd
  • 如果在屏幕会话中退出shell,则会话退出。

您可以围绕自动启动screen的长时间运行流程创建一个包装器脚本。