(转载)nohup命令让Linux程序永远在后台执行

Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。我们自己编写的程序只是普通程序,一般这种程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。

为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:

nohup /root/start.sh &

在shell中回车后提示:

[~]$ appending output to nohup.out

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

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

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

附: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 &

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

任务关闭:kill 命令

  • 法子1:通过 jobs 命令查看job号(假设为num),然后执行:kill %num
  • 法子2:通过    ps 命令查看job的进程号(PID,假设为pid),然后执行:kill pid

前台进程的终止:Ctrl + c

  关闭终端后,在另一个终端jobs已经无法看到后台跑的程序,此时只能利用 ps(进程查看命令):如 ps -u username

  Kill 某个用户的所有进程: killall -u username

本文出处:http://blog.csdn.net/cyq1984/article/details/7531297

时间: 2024-08-03 23:29:38

(转载)nohup命令让Linux程序永远在后台执行的相关文章

linux shell 创建并发后台执行任务并等待任务执行完成

#!/bin/bash echo "i am main" for i in $(seq 1 5) do { sleep 10; echo "i am $i"; }& done wait http://www.cnblogs.com/dorothychai/archive/2012/10/19/2730374.html linux shell 创建并发后台执行任务并等待任务执行完成

Linux前台的程序转到后台执行(关闭终端而不杀死命令)

你是否经常遇到这样的情况,通过SSH或者终端putty连接到一台linux/unix机器,执行一个程序.一个脚本或者一条命令,但现在你需要关闭SSH或者终端,由于该该程序.脚本或者命令正在运行,一旦你直接关闭而不做任何处理这个进程就会一起关闭,做到一半的工作就这样浪费掉,实在是可惜! 下面介绍一种方法可以在需要关闭终端的时,让正在运行的程序.脚本或命令转到后台执行,假设你的程序.脚本或者命令正在执行,下面可进行这样操作: 1.按下ctrl+z2.输入命令bg3.输入disown (在输入时可能只

[转载]应用 Valgrind 发现 Linux 程序的内存问题

应用 Valgrind 发现 Linux 程序的内存问题 如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在.有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题.掌握 valgrind 的使用以及工作原理,能够有效地定位进而避免应用开发中的内存问题. 应用 Valgrind 发现 Linux 程序的内存问题 回页首 Valgrind 概述 体系结构 Valgrind 是一套Linux下,开放源代码(GPL V2)的仿真

[PHP学习教程]002.模拟守护进程(Daemon)-程序永远在后台运行

引言:如何模拟那些自动轮循的服务,像守护进程(Daemon)那样,可以一直执行,永不停歇呢! Come on! Do it! Do! Do! Do!.... 使用接口: int ignore_user_abort ( [bool setting] ) 方法声明: 这个函数的作用是指示服务器端在远程客户端关闭连接后是否继续执行下面的脚本. 参数说明: setting:参数是一个可选参数.如设置为True,则表示如果用户停止脚本运行,仍然不影响脚本的运行(即:脚本将持续执行):如果设置为False,

让PHP程序永远在后台运行

PHP里有个函数很有用.这是在最近的开发中才逐渐用到的. int ignore_user_abort ( [bool setting] ) 这个函数的作用是指示服务器端在远程客户端关闭连接后是否继续执行下面的脚本. setting 参数是一个可选参数.如设置为True,则表示如果用户停止脚本运行,仍然不影响脚本的运行(即:脚本将持续执行):如果设置为False,则表示当用户停止运行脚本程序时,脚本程序将停止运行. 下面这个例子,在用户关闭浏览器后,该脚本仍然后在服务器上继续执行: <?php i

【Linux笔记】在后台执行scp,实现服务器间无密码文件拷贝。

远程备份大容量时常会有这样的情形:从远程备份的文件很大,需要很长时间,想在退出ssh后程序依然能继续在后台下载,可以通过建立服务器间安全信息关系和nohup的方式解决. 有两台服务器:A服务器IP 192.168.3.100.B服务器IP 121.41.111.46. 一.建立服务器之间的安全信任关系证书 1.在A服务器生成密钥配对 在A服务器生成配对密钥,遇到提示时保持默认敲回车即可, [[email protected] ~]#ssh-keygen -t rsa 该公钥被保存的用户宿主目录的

java程序在windows后台执行的办法

1.新建run.txt文件 2.在文件中输入一下内容: @echo off start javaw -jar xx.jar exit 3.保存,修改文件名为run.bat4.双击即可 5.删除windows后台程序 tasklist                                                      查看进程 taskkill  /?                                                 查看杀进程命令的帮助 tas

如何在linux的Oracle上后台执行SQL

场景:如果你要收集库的统计信息,大概要7-8个小时,你又要把自己的电脑关掉,想在服务器上执行,用下列方法. nohup sqlplus user/[email protected] @xxx.sql >run.log & 执行上面的语句后,关闭远程窗口,通过v$session和v$session_wait查看是在跑.也可以通过user_tables的最后分析时间.

nohup命令执行推出后进程退出

nohup命令常常用于让进程在后台执行.但是如果仅仅是执行: nohup command & 之后直接关闭终端的话,会发现之前已经启动进程也会退出.解决办法:nohup command & 之后,看到输出: appending output to nohup.out还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端. [参考]1.http://www.cnblogs.com/allenblogs/archive/2011/05/19/2051