HUP信号,僵尸进程与孤儿进程

HUP信号,僵尸进程与孤儿进程本文详细介绍了 Linux 中的 HUP 信号 包括其作用 命令示例以及如何避免进程被意外关闭

大家好,欢迎来到IT知识分享网。

一.关于HUP信号

1.什么是HUP信号

  • hup信号除了在上一篇讲的从新加载配置文件功能外还具有另外一种功能
  • 当用户注销(exit, logout, Ctrl + d),或者网络断开时,终端会收到Linux HUP 信号
  • HUP信号会使其关闭所有子进程, 这样就会关闭你不想关闭的进程
  • 解决方法:
    1.让进程忽略Linux HUP信号 2.让进程运行在新的终端里,从而不属于当前终端 

2.nohup命令

  • nohup 顾名思义,就是忽略 hup 信号
  • nohup 通常与 & 符号连用, 让提交的命令忽略 Linux HUP 信号
  • 用法
🌵nohup使用十分方便,只需在要处理的命令前加上"nohup"即可,一般配合"&"符号将其放入后台 # nohup [命令] & 
  • 示例
🌵在终端 a 使用"nohup"运行一条"ping"命令 [root@shawn ~]# nohup ping baidu.com &> /dev/null & 🌵在终端 b 过滤出"ping"进程的信息 [root@shawn ~]# ps -elf | grep [p]ing 4 S root 57838 57801 0 80 0 - 37522 poll_s 19:10 pts/1 00:00:00 ping baidu.com 🌵我们"kill"掉该进程的父进程"57801"(终端 a),并再次查看 [root@shawn ~]# kill -9 57801 [root@shawn ~]# ps -elf | grep [p]ing 4 S root 57838 1 0 80 0 - 37522 poll_s 19:10 pts/1 00:00:00 ping baidu.com 🌵可以发现终端 a 关闭后,其下的子进程并没有关闭,但父进程PID变成了"1","systemd"进程 

3.setsid命令

  • 原理与 nohup 一样
  • setsid 是直接将进程的父进程PID设置成 1
  • 即直接让 systemd 成为该进程的父进程, 那么除非 systemd 结束,该子进程才会结束
  • 用法
# setsid [命令] ( & 符号可加可不加) 
  • 示例
🌵在终端 a 中使用"setsid"命令运行一条"sleep"命令 [root@shawn ~]#setsid sleep  🌵关闭终端 a, 在终端 B 中查看进程信息,发现进程还在运行,并且父进程PID为 "1" [root@shawn ~]#ps -elf | grep [s]leep 0 S root 63319 1 0 80 0 - 27013 hrtime 20:56 ? 00:00:00 sleep  

4.在子shell中提交任务

  • 什么是子 Shell
就是从当前的的"shell"环境中开的一个新"shell" 
  • 用法
# ([命令] &) 🌵圆括号结构能够强制将其中的命令运行在子Shell中 
  • 示例
🌵在终端 a 中使用"( )"结构运行一条"ping"命令 [root@shawn ~]#(ping baidu.com&>/dev/null &) 🌵关闭终端 a, 在终端 B 中查看进程信息,发现进程还在运行,并且父进程PID为 "1" [root@shawn ~]#ps -elf | grep [p]ing 4 S root 64003 1 0 80 0 - 37522 poll_s 21:09 pts/1 00:00:00 ping baidu.com 

5.screen命令

  • 什么是screen
Screen 是一个命令行终端切换的软件 在"screen"环境下,所有的会话都将独立运行 使用前先安装它"yum install screen -y" 
  • 用法
# screen [后面接一些命令或用法,不唯一,往下会演示] 
  • 常用命令选项
-ls 显示现有的screen会话,格式为(pid.tty.host)
-r [name/PID] 恢复一个screen会话
-S [name] 创建一个screen会话并命名
-x 共享一个会话演示,可以操作(多个屏幕)
-wipe 先检查所有screen会话, 然后删除无法使用screen会话
Ctrl + d / exit 退出screen会话
Ctrl + a,Ctrl + d 隐藏当前screen会话窗口,切到上一个窗口/终端
  • screen运行机制

使用 screen 运行一个 vim

screen vim nnn.txt然后查看进程信息

HUP信号,僵尸进程与孤儿进程

可以发现一共产生了这三个进程, 画个图👇👇👇👇👇

HUP信号,僵尸进程与孤儿进程

我们将screen这个进程 kill掉看看结果

HUP信号,僵尸进程与孤儿进程

发现对 vim 进程真的没有影响, 而 SCREEN 也被 systemd 接管了

这不就是我们使用 screen 想要的结果吗

  • 示例
🌵开启一个窗口并指定名字,也可以不指定 # screen -S song1 🌵在screen会话窗口中的退出操作 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143925.html

(0)
上一篇 2025-04-30 14:00
下一篇 2025-04-30 14:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信