关于linux:linux后台执行命令与nohup的用法

50次阅读

共计 1614 个字符,预计需要花费 5 分钟才能阅读完成。

大家可能有这样的体验:某个程序运行的时候,会产生大量的 log,但实际上咱们只想让它跑一下而已,log 临时不须要或者前面才有须要。所以在这样的状况下,咱们心愿程序可能在后盾进行,也就是说,在终端上咱们看不到它所打出的 log。为了实现这个需要,咱们介绍以下几种办法。

咱们以上面一个 test 程序来模仿产生大量 log 的程序,这个程序每隔 1 秒就会打印一句“Hello world!”:

#include 
#include 
#include 

int main()
{fflush(stdout);
    setvbuf(stdout, NULL, _IONBF, 0);

    while (1) {printf("Hello world!\n");
        sleep(1);
    }
}

当初,咱们想要一个清静的世界,终端上不要有大量的 log 呈现,咱们要求 test 程序在后盾运行。

&

这种办法很简略,就是在命令之后加个“&”符号就能够了,如下:

./test &

这样一来,test 程序就在后盾运行了。然而,这样解决还不够,因为这样做尽管程序是在后盾运行了,但 log 仍然不停的输入到以后终端。因而,要让终端彻底的清静,还应将 log 重定向到指定的文件:

./test >> out.txt 2>&1 &

2>&1 是指将规范谬误重定向到规范输入,于是规范谬误和规范输入都重定向到指定的 out.txt 文件中,从此终端彻底清静了。

然而这样做要留神,如果 Test 程序须要从规范输出接收数据,它就会在那死等,不会再往下运行。所以须要从规范输出接收数据,那这种办法最好不要应用。

那当初程序在后盾运行了,咱们怎么找到它呢?很简略,有两种办法:

1. jobs 命令

jobs 命令能够查看以后有多少在后盾运行。

jobs -l

此命令可显示所有工作的 PID,jobs 的状态能够是 running, stopped, Terminated。然而如果工作被终止了(kill),shell 从以后的 shell 环境已知的列表中删除工作的过程标识。

2. ps 命令

ps aux | grep test

nohup 命令

在命令的开端加个 & 符号后,程序能够在后盾运行,然而一旦以后终端敞开(即退出以后帐户),该程序就会进行运行。那如果说咱们想要退出以后终端,但又想让程序在后盾运行,该如何解决呢?

实际上,这种需要在事实中很常见,比方想近程到服务器编译程序,但网络不稳固,一旦掉线就编译就停止,就须要从新开始编译,很浪费时间。

在这种状况下,咱们就能够应用 nohup 命令。nohup 就是不挂起的意思(no hang up)。该命令的个别模式为:

nohup ./test &

如果仅仅如此应用 nohup 命令的话,程序的输入会默认重定向到一个 nohup.out 文件下。如果咱们想要输入到指定文件,可另外指定输入文件:

nohup ./test > myout.txt 2>&1 &

这样一来,多管齐下,既应用了 nohup 命令,也应用了 & 符号,同时把规范输入 / 谬误重定向到指定目录下。

应用了 nohup 之后,很多人就这样不论了,其实这样有可能在以后账户非正常退出或者完结的时候,命令还是本人完结了。所以在应用 nohup 命令后盾运行命令之后,须要应用 exit 失常退出以后账户,这样能力保障命令始终在后盾运行。

更多精彩内容,请关注公众号 良许 Linux,公众内回复 1024 可收费取得 5T 技术材料,包含:Linux,C/C++,Python,树莓派,嵌入式,Java,人工智能 ,等等。公众号内回复 进群,邀请您进高手如云技术交换群。


最初,最近很多小伙伴找我要Linux 学习路线图,于是我依据本人的教训,利用业余时间熬夜肝了一个月,整顿了一份电子书。无论你是面试还是自我晋升,置信都会对你有帮忙!

收费送给大家,只求大家金指给我点个赞!

电子书 | Linux 开发学习路线图

也心愿有小伙伴能退出我,把这份电子书做得更完满!

有播种?心愿老铁们来个三连击,给更多的人看到这篇文章

举荐浏览:

  • 干货 | 程序员进阶架构师必备资源免费送
  • 神器 | 反对搜寻的资源网站

正文完
 0