nohup 让程序永不间断地运行

Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:

         /usr/local/mysql/bin/mysqld_safe --user=mysql &

 但是我们很多程序并不象mysqld一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:

            nohup /root/start.sh &

          在shell中回车后提示:

           [~]$ appending output to nohup.out

      原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。

但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。

咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。

在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。

附:nohup命令参考

nohup 命令

  用途:不挂断地运行命令。

  语法:nohup Command [ Arg ... ] [ & ]

  描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示"and"的符号)到命令的尾部。

  无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

  退出状态:该命令返回下列出口值:

  126 可以查找但不能调用 Command 参数指定的命令。

  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

  nohup命令及其输出文件

  nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

  该命令的一般形式为:nohup command &

  使用nohup命令提交作业

  如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

  nohup command > myout.file 2>&1 &

  在上面的例子中,输出被重定向到myout.file文件中。

  使用 jobs 查看任务。

  使用 fg %n 关闭。

<think>首先,用户的问题是:“我想查找查看使用nohup命令运行程序的方法 请问如何查看使用nohup命令运行程序”。用户想了解如何查看使用nohup命令运行程序。 从系统指令中,我需要: - 所有行内数学表达式使用$...$格式(但在这个上下文中,可能没有数学表达式)。 - 独立公式使用$$...$$格式(同样,可能不适用)。 - LaTeX语法正确(但这里主要是文本)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 用户提供了几个引用: - 引用[1]:关于nohup的总结。 - 引用[2]:在MobaXterm中使用nohup运行程序。 - 引用[3]:Centos7使用nohup运行Python程序。 - 引用[4]:详细分析nohup后台运行命令。 用户说这些引用仅供参考,不是用户的真正需求。用户上一次的问题是查找如何查看使用nohup命令运行程序。 用户的问题是:“我想查找查看使用nohup命令运行程序的方法 请问如何查看使用nohup命令运行程序”。所以,核心是“如何查看”。 从引用中,我可以提取相关信息: - 引用[2]提到运行程序:`nohup python xx.py`,但没有直接说如何查看运行中的程序。 - 引用[3]提到后台运行:`nohup python3 -u tcp_client.py > tcp.log 2>&1 &`,并解释了一些参数,但没有说如何查看。 - 引用[4]类似,基本示例:`nohup python long_running_script.py > output.log 2>&1 &`,并解释了重定向。 用户真正想知道如何查看运行中的程序。可能包括: - 如何检查nohup运行程序是否在运行。 - 如何查看日志文件。 - 如何kill或管理进程。 基于我的知识: - 使用nohup运行程序后,程序在后台运行。输出被重定向到文件(如output.log)。 - 要查看运行中的程序,可以使用命令如`ps`(进程状态)或`top`。 - 具体来说,`ps aux | grep python`可以查找Python程序。 - 或者,使用`jobs`命令查看后台作业(但nohup通常在终端关闭后依然运行,所以`jobs`可能只在当前会话可用)。 - 查看日志文件:如`tail -f output.log`实时查看日志。 用户的问题焦点是“查看”,所以我需要解释如何查看运行状态和输出。 结构化回答: 1. **解释nohup的作用**:nohup用于在后台运行程序,即使终端关闭。 2. **如何查看运行中的程序**: - 使用`ps`命令:`ps aux | grep 'program_name'`。 - 使用`top`或`htop`查看进程。 - 结合`grep`筛选。 3. **如何查看输出**: - 日志文件(如output.log):使用`cat`, `less`, `tail -f`等命令。 4. **其他管理**:如如何停止进程(使用`kill`)。 5. **引用相关内容**:从提供的引用中,提取有用的部分自然添加引用标识。 例如: - 引用[3]提到输出重定向到文件,所以可以说:输出日志可以通过查看指定的文件查看[^3]。 - 引用[4]类似。 生成相关问题: - 如系统指令所说,在回答末尾生成相关问题。 - 例如: 1. 如何停止nohup运行程序? 2. nohup输出日志如何配置? 3. 检查nohup命令的常见问题? 确保回答清晰、逐步解决问题: - 步骤1:运行nohup程序。 - 步骤2:查看进程状态。 - 步骤3:查看日志文件。 - 步骤4:管理进程。 最后,使用中文。 </think>### 如何查看使用nohup命令运行程序 使用`nohup`命令可以在Linux系统中后台运行程序(如Python脚本或Java应用),即使终端关闭或断开连接,程序也能继续执行。要**查看运行中的nohup程序**,主要涉及检查进程状态和输出日志。以下是详细的步骤和方法,基于Linux系统通用操作(如CentOS或Ubuntu)。我将逐步解释,确保内容清晰可靠。 #### 1. **确认后台进程状态** 使用`ps`命令(进程状态命令)结合`grep`筛选,可以查找正在运行nohup程序进程。命令语法如下: ```bash ps aux | grep '关键字' ``` - **`ps aux`**:列出所有运行中的进程。 - **`| grep '关键字'`**:筛选包含特定关键词的进程(例如Python脚本名或Java程序名)。 - **示例**:假设您运行了`nohup python my_script.py > output.log 2>&1 &`,则查看命令为: ```bash ps aux | grep 'my_script.py' ``` 输出会显示进程ID(PID)、状态和命令详情,例如: ``` user 12345 0.0 0.1 123456 7890 ? S Jun01 0:00 python my_script.py ``` 这里,PID `12345`可用于后续管理。如果未列出,程序可能未运行或已结束[^3][^4]。 - **进阶命令**: - 使用`top`或`htop`实时查看所有进程:输入`top`,然后按`Shift + F`筛选关键词。 - 使用`pgrep`快速获取PID:`pgrep -f 'my_script.py'`。 #### 2. **查看输出日志** nohup程序的标准输出和错误通常被重定向到日志文件(如`output.log`)。使用文本查看命令实时或静态检查日志: - **实时跟踪日志**:使用`tail -f`命令,适合监控运行中的输出。 ```bash tail -f /path/to/output.log ``` 例如,如果命令是`nohup python xx.py > tcp.log 2>&1 &`,则运行: ```bash tail -f tcp.log ``` 屏幕上会动态刷新日志内容,帮助调试或监控执行进度[^3][^4]。 - **查看完整日志**:使用`cat`或`less`命令。 ```bash cat /path/to/output.log # 显示所有内容 less /path/to/output.log # 分页查看(按q退出) ``` 如果未指定日志文件,nohup默认输出到当前目录的`nohup.out`文件中[^1][^4]。 #### 3. **管理和停止程序** 如果需要停止或重启后台程序: - **停止进程**:使用`kill`命令终止进程。 ```bash kill PID # 优雅停止(发送SIGTERM信号) kill -9 PID # 强制停止(发送SIGKILL信号),适用于无响应进程 ``` 示例:从`ps aux`获取PID后,`kill 12345`。 - **检查运行状态**:使用`jobs`命令(仅在当前终端会话有效),但nohup设计为独立于会话运行,因此`ps`更可靠[^1][^4]。 #### 注意事项 - **日志文件位置**:运行nohup时,务必指定输出文件(如`> output.log`),否则默认生成`nohup.out`文件。确保您有权限访问该文件。 - **常见问题**:如果看不到进程或日志: - 程序可能已结束:检查日志文件末尾是否有错误信息。 - 权限问题:使用`sudo`运行查看命令(如`sudo tail -f output.log`)。 - 参考引用:nohup通过重定向输出确保任务稳定运行,合理查看日志能提高运维效率[^1][^3]。 通过以上步骤,您可以轻松查看和管理后台运行nohup程序。如需进一步优化,请参考相关问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值