博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux关闭终端(关闭SSH等)后,程序继续运行
阅读量:3917 次
发布时间:2019-05-23

本文共 838 字,大约阅读时间需要 2 分钟。

实习遇到一些问题,万一添加nohup 命令了,因为下班电脑需要带走,

所以需要将程序放入后台并且关闭SSH后程序仍能继续执行

&的意思是在后台运行, 什么意思呢?  意思是说, 当你在执行 ./a.out & 的时候, 即使你用ctrl C,  那么a.out照样运行(因为对SIGINT信号免疫)。 但是要注意, 如果你直接关掉shell后, 那么, a.out进程同样消失。 可见, &的后台并不硬(因为对SIGHUP信号不免疫)。

      nohup的意思是忽略SIGHUP信号, 所以当运行nohup ./a.out的时候, 关闭shell, 那么a.out进程还是存在的(对SIGHUP信号免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那么, a.out进程也是会消失的(因为对SIGINT信号不免疫)

      所以, &和nohup没有半毛钱的关系, 要让进程真正不受shell中Ctrl C和shell关闭的影响, 那该怎么办呢? 那就用nohua ./a.out &吧, 两全其美。

       如果你懂守护进程, 那么nohup ./a.out &颇有点让a.out成为守护进程的感觉。

 

相关命令:

 

jobs------------查看在后台执行的进程

 

fg %n----------将后台执行进程n调到前台执行,n表示jobnumber(通过jobs查看的进程编号,而非pid)

 

ctrl+z----------将在前台执行的进程,放到后台并挂起

 

bg %n---------将在后台挂起的进程,继续执行

 

ctrl+c----------前台进程终止

 

kill %n---------杀掉后台运行的进程,n表示jobnumber(通过jobs查看的进程编号,而非pid)

 

输入命令:disown -h %1

这个命令的意思是将1号任务从当前shell的任务列表中移除,并且忽略HUP信号,这样,即使当前Shell结束了,这个任务也不会被结束,而是继续留在后台执行。

转载地址:http://mdtrn.baihongyu.com/

你可能感兴趣的文章
一位10年Java工作经验的架构师聊Java和工作经验
查看>>
Java架构师学习路线
查看>>
号称精通Java的你,是否真的名副其实
查看>>
你可以把编程当做一项托付终身的职业
查看>>
细思极恐——你真的会写Java吗?
查看>>
Java并发面试,幸亏有点道行,不然又被忽悠了
查看>>
Java基础面试题收集整理
查看>>
SpringBoot基础篇Bean之条件注入@Condition使用姿势
查看>>
让你秒懂线程和线程安全,只需5步!
查看>>
Spring Boot学习之Logback和Log4j2集成与日志发展史
查看>>
Java注解(annotation)机制
查看>>
volatile关键字全面解析
查看>>
Java如何实现哈夫曼编码
查看>>
从源代码的角度理解Java设计模式的装饰模式
查看>>
系统架构中为什么要引入消息中间件?
查看>>
Java内存模型详解
查看>>
Java NIO之Selector
查看>>
SLF4J源码解析(一)
查看>>
Spring AOP用法详解
查看>>
记一位朋友斩获BAT技术专家Offer的面试经历
查看>>