如果我从 shell 运行 emacs:
$ emacs foo &
Run Code Online (Sandbox Code Playgroud)
然后杀死那个外壳,emacs 死了。
如何运行命令使其在 shell 死机时不会死机?
我找到了对 nohup 的引用,但这似乎没有帮助:
$ nohup emacs foo &
Run Code Online (Sandbox Code Playgroud)
当 shell 死亡时,仍然会杀死 emacs。
如果我注销/退出 SSH 连接,我需要我的程序在后台运行。退出前,我输入bg并jobs检查后台运行任务,但退出SSH后,程序没有运行,当我关闭SSH窗口时它关闭。
如果我希望我的程序在关闭 SSH 窗口后仍然运行,我该怎么办?我确实使用过nohup screen但它也不起作用,或者我错过了什么?
我不知道这是否属于 SO(因为它是一个编码错误),但我认为你们会更了解所用软件的微妙之处(因此甚至可以考虑 U&L)。
这是最小的代码脚本(请参阅完整脚本的编辑,我这样做是有原因的);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
Run Code Online (Sandbox Code Playgroud)
它试图做的是在后台运行一个服务器,它输出到一个日志文件。
然后我follow使用less +F. 与您一样,要退出此操作,您必须先按ctrl+c才能按Q。
发生的事情是,当我ctrl+c在less命令中(停止tailing)时,它会以某种方式杀死nohup从顶部开始的服务器!其他没有任何影响。我可以shift+f再次开始拖尾日志(由于服务器被终止,因此不会获得新信息),如果我点击Q脚本的其余部分,则脚本的其余部分将正常执行。
你知道为什么会这样吗?如何避免它/我应该使用的其他东西?
PS
服务器程序可能正在侦听^C,这可能是问题所在;我能做些什么来阻止它吗?就像,当我{SERVERCOMMAND}自己运行(以阻塞方式)时,我可以点击ctrl+ c,这不会立即杀死它;它打印Received ^C signal, shutting down(然后杀死自己)。这就是当我^C进入时发生的事情less(决赛Received ^C signal, shutting down被写入日志)。
PPS
我一直在尝试很多东西(都没有成功);
尝试通过更改将 stdin 与脚本断开连接
nohup {SERVERCOMMAND} > …Run Code Online (Sandbox Code Playgroud)如果我用 nohup 启动一个进程:
nohup WHATEVER &
Run Code Online (Sandbox Code Playgroud)
那我怎么能再看到呢?我的意思是如何在 Linux 下再次将我的终端连接到它,例如:Ubuntu 11.04 - 就像screen包一样。
作为这个问题的后续,我想知道我运行的程序的 STDOUT 和 STDERRdisown -h被重定向到哪里。
我在运行长期(数周?)进程的 xterm 中有一个 tcsh 实例。它运行的 Xvnc 服务器在杂草中消失了;它消耗 100% 的 CPU 并且没有响应。(这是一个已知的错误,我知道它是不可恢复的。)
长期进程目前在标准输出上阻塞。
有什么办法可以杀死一个底层进程——tcsh、xterm 等等——并保持这个长期进程运行?
(拜托,没有关于 的答案screen。我知道。这不是我的过程;这是用户的。他们不会学习。)
我正在尝试做
[me@myPc]$ ssh me@server "nohup myBashScript.sh &"
Run Code Online (Sandbox Code Playgroud)
我的目标是在服务器上启动进程,然后立即返回。
它不起作用:该作业在服务器上启动,但我仍然在 myPc 上获得输出,并且 bash 在要求我输入另一个命令之前等待完成。
为什么 ?这不应该!有什么办法可以避免吗?
RHEL6.2ubuntu 10.04和openssh可能的重复:
如何完全从终端分离进程?
我有一个程序在远程 Unix 计算机上的 Unix 控制台中运行。我(愚蠢地)没有使用 运行它nohup &,现在我需要关闭本地控制台。
有没有办法让它在关闭本地控制台后继续远程运行?
我可以出于工作目的访问远程 Linux shell。我使用nohup.
现在,如果我想退出会话,使用logout和exit命令有什么区别?我的脚本会在这两种情况下继续运行吗?
我nohup经常在linux/下用于重要的长时间运行的进程bash,以至于这nohup time my command with arguments && mv nohup.out my.log对我来说几乎是一个习语。
问题是nohup将stdout和 都stderr放入nohup.out,我无法控制文件的名称。这意味着如果我不小心nohup在同一个目录中启动了两个s,它们的输出将在nohup.out.
问题是:
我该如何处理这个问题?总是nohup在不同的目录中运行s 并编写一个首先检查的 shell 函数,这./nohup.out是我看到的两个糟糕的选项。
为什么我不知道nohup将输出重定向到哪里?GNU 工具往往有这么多的选择,为什么不nohup呢?