nohup跟&区别

nohup跟&区别

主要是解决不通的信号问题,linux的信号如下:

SIGHUP / hangup /

SIGHUP,hong up ,挂断。本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。

登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和 后台进程组,一般都属于这个 Session。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进 程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也 能继续下载。

此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。

SIGINT / interrupt /

程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl+C)时发出,用于通知前台进程组终止进程。

使用&后台运行程序:

结果会输出到终端

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

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

使用nohup运行程序:

结果默认会输出到nohup.out

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

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

所以使用nohup &的联合就可以实现即时当前回会话关掉(nohup)也可以后台(&)执行,不阻塞当前客户端交互。

原创技术分享,您的支持将鼓励我继续创作