终端进程和其启动进程之间的关系

用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出

 

使用&后台运行程序:

  • 结果会输出到终端

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

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

使用nohup运行程序:

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

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

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

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

  • 同时免疫SIGINT和SIGHUP信号

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

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


 

守护进程和其区别:

1.守护进程已经完全脱离终端控制了,而后台进程并未完全脱离终端,在终端未关闭前还是会往终端输出结果。

2.守护进程在关闭终端控制台时不会受影响,而后台程序会随用户退出而停止,需要在以nohup command &格式运行才能避免影响。

3.守护进程的会话组和当前目录,文件描述符都是独立的,后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变。

查看守护进程:

ps -axj

-a表示显示由其他用户所拥有的进程的状态

-x显示没有控制终端的进程状态

-j显示与作业有关的信息:会话ID、进程组ID等

4.使普通进程达到守护进程的部分效果:

nohup ./a.out &

终端进程和终端启动进程之间的关系:

https://blog.csdn.net/ybxuwei/article/details/77149575

 

用 fork 创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程
往往要调用一种 exec 函数以执行另一个程序。当进程调用一种 exec 函数时,该进程的用户空间
代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用 exec 并不创建新进程,所
以调用 exec 前后该进程的id并未改变

posted @ 2023-01-08 23:07  車輪の唄  阅读(21)  评论(0编辑  收藏  举报  来源