zoukankan      html  css  js  c++  java
  • Linux nohup和&的功效

    nohup和&究竟有啥区别?不少同学进行了回复,但并不是所有同学都理解得全对,今天把自己挖的坑自己填了。

    测试代码如下:

    是一个输出hello与循环轮数的死循环程序,每输出一行就休眠1秒。

    使用 ./a.out 前台运行程序,会是什么效果呢?

    程序每隔一秒会在终端输出一个字符串。

    此时如果键入Ctrl+C ,程序会收到一个SIGINT信号,如果不做特殊处理,程序的默认行为是终止(如上图)。

    使用 ./a.out& 后台运行程序,会是什么效果呢?

    如上图:

    • 首先会在终端显示进程号是32389

    • 键入Ctrl + C,发出SIGINT信号,程序会继续运行

    ps确认一下,确认进程依然在运行,进程号是32389。

    此时如果关掉session,程序会收到一个SIGHUP信号,此时会怎么样呢?

    ps再次确认,可以看到关闭session之后,进程号是32389的a.out进程也关闭了。

    使用nohup ./a.out 又会是什么效果呢?

    使用nohup 运行程序a.out,会发现:

    • 前台没有出现进程号

    • 有一个“忽略输入,输出至nohup.out”的提示

    • hello的输出也没有出现在前台

    手动ps看进程号,这次a.out的进程号是32437。

    此时如果关掉session,程序会收到一个SIGHUP信号,程序会不会关闭呢?

    关掉session后,再次ps看一下,ID为32437的a.out进程还在。

    这些只能通过kill把程序干掉了,killall之后,ps查看进程已经关闭。

    killall之后,查看发现多了一个nohup.out文件,不过这个文件的大小是0,有点奇怪,启动程序的时候,明明提示了“appending output to nohup.out”呀,先把问题遗留在这,测试一下Ctrl +C。

    仍如上图,使用nohup启动a.out,如果键入Ctrl+C ,程序收到SIGINT信号后,直接关闭了。

    最后测试一下nohup和&同时使用,即用nohup./a.out &运行程序,又会是什么效果呢?

    使用nohup ./a.out &运行程序后,可以看到:

    • 会在终端显示进程号是32524

    • 也会有一个“忽略输入,输出至nohup.out”的提示

    键入Ctrl + C,发送SIGINT信号,似乎没反应。

    关闭session,发送SIGHUP信号,再来看看。

    ID为32524的进程依然存在,后续也只能用kill来关闭它。

    结论

    使用&后台运行程序:

    • 结果会输出到终端

    • 使用Ctrl + C发送SIGINT信号,程序免疫

    • 关闭session发送SIGHUP信号,程序关闭

    使用nohup运行程序:

    • 结果默认会输出到nohup.out

    • 使用Ctrl + C发送SIGINT信号,程序关闭

    • 关闭session发送SIGHUP信号,程序免疫

    平日线上经常使用nohup和&配合来启动程序

    • 同时免疫SIGINT和SIGHUP信号

    同时,还有一个最佳实践:

    • 不要将信息输出到终端标准输出,标准错误输出,而要用日志组件将信息记录到日志里

    本文转载自微信公众号:架构师之路,因为老找不到地址,做下记录~

  • 相关阅读:
    SharePoint 2013 图文开发系列之自定义字段
    SharePoint 2013 图文开发系列之Visual Studio 创建母版页
    SharePoint 2013 图文开发系列之代码定义列表
    SharePoint 2013 图文开发系列之计时器任务
    SharePoint 2013 图文开发系列之应用程序页
    SharePoint 2013 图文开发系列之事件接收器
    SharePoint 2013 图文开发系列之可视化WebPart
    SharePoint 2013 图文开发系列之WebPart
    SharePoint 2013 对二进制大型对象(BLOB)进行爬网
    SharePoint 2013 状态机工作流之日常报销示例
  • 原文地址:https://www.cnblogs.com/dousnl/p/11463540.html
Copyright © 2011-2022 走看看