nohup 与 linux 程序后台执行

 

来源:http://blog.chinaunix.net/uid-446337-id-94446.html

 

 

& 方式:

 

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

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

 

 

nohup方式:

 

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

nohup 命令 用途:不挂断地运行命令。 该命令的一般形式为:nohup command & 语法: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.out 的文件中,除非另外指定了输出文件: 

nohup command > myout.file 2>&1 & 

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

        使用 jobs 查看任务。 
        使用 fg %n 关闭。 

 

 

nohup 后台运行

 

nohup command 或者 nohup command & 这之间的差别是带 & 的命令行,即使 terminal(终端)关闭,或者电脑死机程序依然运行。

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

nohup /root/start.sh & 

在shell中回车后提示: [~]$ appending output to nohup.out 
原程序的的标准输出被自动改向到当前目录下的 nohup.out 文件,起到了 log 的作用。

 

 

nohup 重定向

nohup 把标准输出(STDOUT)和标准错误(STDERR)结果输出到 nohup.out 文件这个看似很方便,但是当输出很大的时候,nohup.out 文件会非常大,或者多个后台命令的时候大家都会输出到 nohup.out 文件,不利于查找结果和调试程序。 所以能够重定向输出会非常方便。下面要介绍标准输出,标准输入 和标准错误了。

其实我们一直都在用。比如:

    >./command.sh > output     # 这其中的 > 就是标准输出符号,其实是 1>output 的缩写 >./command.sh 2> output    # 这里的 2> 就是将标准错误输出到 output 文件里。 # 而 0< 则是标准输入了。 

下面步入正题,重定向后台命令

>nohup ./command.sh > output 2>&1 & 

解释:前面的 nohup 和后面的 & 就不用解释了,主要是中间的 2>&1的意思 ,这个意思是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件output里面,所以结果是标准错误和标准输出都导入文件output里面了。 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。 这就会导致 >output 2>output 文件 output 被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的.,这就是为什么有人会写成: nohup ./command.sh >output 2>output出错的原因了 

########################## 

最后谈一下/dev/null文件的作用 

这是一个无底洞,任何东西都可以定向到这里,但是却无法打开。 

所以一般很大的stdou和stderr当你不关心的时候可以利用stdout和stderr定向到这里>./command.sh >/dev/null 2>&1 

 

 

nohup 问题

 

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

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

    这个细节有人和我一样没注意到,所以在这儿记录一下了。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Guava入门~Splitter

String.split()问题&#xff1a;中间保留&#xff0c;最后丢弃 String commaSeparatedString "Foo,,Bar,,Baz,,,"; String[] words commaSeparatedString.split(","); //[Foo, , Bar, , Baz] System.out.println(Arrays.toString(words)); 演示 impo…

C++学习之路 | PTA乙级—— 1038 统计同成绩学生 (20 分)(精简)

1038 统计同成绩学生 (20 分) 本题要求读入 N 名学生的成绩&#xff0c;将获得某一给定分数的学生人数输出。 输入格式&#xff1a; 输入在第 1 行给出不超过 10 ​5 ​​ 的正整数 N&#xff0c;即学生总人数。随后一行给出 N 名学生的百分制整数成绩&#xff0c;中间以空格分…

frame或者iframe的contentwindow属性

contentwindow属性是指指定的frame或者iframe所在的window对象&#xff1a; <script> function fnnavigate() { for(i0;i<document.all.length;i) { if(document.all(i).tagname"iframe") { document.all(i).contentwindow.location "http://www.msn.…

C++学习之路 | PTA乙级—— 1039 到底买不买 (20 分)(精简)

1039 到底买不买 (20 分) 小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串&#xff0c;但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下&#xff0c;某串珠子里是否包含了全部自己想要的珠子&#xff1f;如果是&#xff0c;那么告诉她有多少多…

Yoshua Bengio团队最新强化学习研究:智能体通过与环境交互,「分离」变化的独立可控因素

原文来源&#xff1a;arXiv作者&#xff1a;Valentin Thomas、Emmanuel Bengio∗、William Fedus、Jules Pondard、Philippe Beaudoin、Hugo Larochelle、Joelle Pineau、Doina Precup、Yoshua Bengio「雷克世界」编译&#xff1a;嗯~阿童木呀人们普遍认为&#xff0c;一个良好…

supervisor安装和配置

supervisor 是由python语言编写、基于linux操作系统的一款服务器管理工具&#xff0c;用以监控服务器的运行&#xff0c;发现问题能立即自动预警及自动重启等功能。 Supervisor是一个进程管理工具&#xff0c;官方的说法 用途就是有一个进程需要每时每刻不断的跑&#xff0c;但…

Guava入门~Strings

import org.hamcrest.CoreMatchers; import org.junit.Assert; import com.google.common.base.Strings;/*** TODO 在此写上类的相关说明.<br>* author gqltt<br>* version 1.0.0 2021年11月11日<br>* see * since JDK 1.5.0*/ public class StringsDemo {/*…

六级没过

很不幸&#xff0c;六级没过&#xff0c;有点失落&#xff0c;想找块豆腐撞。 转载于:https://www.cnblogs.com/prayforsmile/archive/2008/03/04/1090604.html

斯坦福联合DeepMind提出将「强化学习和模仿学习」相结合,可实现多样化机器人操作技能的学习

原文来源&#xff1a;arXiv作者&#xff1a;Yuke Zhu、Ziyu Wang、Josh Merel、Andrei Rusu、Tom Erez、Serkan Cabi、Saran Tunyasuvunakool、Janos Kram ar、Raia Hadsell、Nando de Freitas、Nicolas Heess「雷克世界」编译&#xff1a;嗯~阿童木呀我们提出了一种无模型的深…

C++学习之路 | PTA乙级—— 1024 科学计数法 (20 分)(精简)

1024 科学计数法 (20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法&#xff0c;其满足正则表达式 [][1-9].[0-9]E[][0-9]&#xff0c;即数字的整数部分只有 1 位&#xff0c;小数部分至少有 1 位&#xff0c;该数字及其指数部分的正负号即使对正数也必定明…

Guava入门~CharMatcher

import org.hamcrest.CoreMatchers; import org.junit.Assert; import com.google.common.base.CharMatcher;/*** TODO 在此写上类的相关说明.<br>* author gqltt<br>* version 1.0.0 2021年11月11日<br>* see * since JDK 1.5.0*/ public class CharMatcher…

用人不疑,疑人不用

用人不疑&#xff0c;疑人不用&#xff0c;这句古训是否正确呢&#xff1f;现在的社会也许有很多人认为已经不在适用了&#xff0c;不过我们看待问题还是一分为二&#xff0c;我觉得有不适用的理由&#xff0c;也有适用的理由。不适用的理由&#xff0c;搜索一下太多了&#xf…

大型传统企业如何向人工智能转型?

来源&#xff1a;FT中文网在新一波技术浪潮的冲击下&#xff0c;以AI、大数据、云计算、物联网、5G通信等一系列技术为代表的“技术簇”所引发的革命对人类社会的影响将是全面且深刻的。每一个商业单元都面对这样的机遇&#xff1a;能否通过对新技术的运用&#xff0c;为客户创…

C++学习之路 | PTA乙级—— 1034 有理数四则运算 (20 分)(精简)

1034 有理数四则运算 (20 分) 本题要求编写程序&#xff0c;计算 2 个有理数的和、差、积、商。 输入格式&#xff1a; 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数&#xff0c;其中分子和分母全是整型范围内的整数&#xff0c;负号只可能出现在分子前&…

linux 下载 命令 wget 和 curl

From&#xff1a;http://www.jb51.net/LINUXjishu/86326.html From &#xff1a;Linux curl 命令详解 - http://www.cnblogs.com/duhuo/p/5695256.html Linux curl 命令参数详解&#xff1a;http://www.aiezu.com/system/linux/linux_curl_syntax.html Linux下使用 curl &…

sql server存储过程中解决单引号的问题

一&#xff1a;目的想在sql中插入号&#xff0c;例如&#xff1a;select count&#xff08;*&#xff09;from user where nametoma)使用转义字符&#xff1a;select char(39)或select char(39)查询的结果是&#xff1a;例如&#xff1a;select char(39) 44555 char(39)查询的…

Guava入门~Charsets

import java.io.UnsupportedEncodingException; import org.hamcrest.CoreMatchers; import org.junit.Assert; import com.google.common.base.Charsets;/*** TODO 在此写上类的相关说明.<br>* author gqltt<br>* version 1.0.0 2021年11月11日<br>* see * …

无人驾驶推进时间表及五大技术领域关键节点

来源&#xff1a;莫尼塔财新智库摘要&#xff1a;本文援引莫尼塔财新智库的一篇研究&#xff0c;系统梳理了无人驾驶各关键技术节点以及其成熟时间。”“汽车技术发展到如今&#xff0c;几乎没有人质疑无人驾驶会成为汽车行业变革的巨大浪潮&#xff0c;然而对于各项技术落地的…

C++学习之路 | PTA乙级—— 1040 有几个PAT (25 分)(精简)

1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT&#xff0c;其中第一个 PAT 是第 2 位&#xff0c;第 4 位(A)&#xff0c;第 6 位(T)&#xff1b;第二个 PAT 是第 3 位&#xff0c;第 4 位(A)&#xff0c;第 6 位(T)。 现给定字符串&#xff0c;问一共可以形成多…

linux sed 命令详解

参考&#xff1a;http://www.cnblogs.com/ctaixw/p/5860221.html sed 常用选项 和 常用命令 sed 是一个很好的文件处理工具&#xff0c;本身是一个管道命令&#xff0c;主要是 以行为单位 进行处理&#xff0c;可以将数据行进行替换、删除、新增、选取等特定工作。 sed 的用法 …