当前位置: 首页 > Linux

linuxctrl-c详解(ctrl-c详解)

时间:2023-04-06 03:25:11 Linux

类别1后台姿势2前戏3晚餐4systemctlstopdocker5demo1后台姿势驱动driver全称devicedriver是添加到操作系统中的特殊程序,其中包含有关信息硬件设备。此信息使计算机能够与适当的设备进行通信。中断触发系统将运行时间从用户态程序返回到内核态的一种方式。TerminalTerminal伪终端(pseudoterminal)-->/dev/pts/8当重要事件发生时,向程序发送会话信号,表示软件中断。系统收到信号后,会将CPU时间交给内核态,然后退出程序,挂起,恢复,或自定义运行。commonsignal信号键含义SIGINTCtrl-C退出当前会话所有前台进程SIGTSTPCtrl-Z暂停前台进程SIGTERMGracefullykill指定进程,可阻塞SIGKILL强制杀死指定进程Ctrl-D不是信号,写EOFtoinput发送信号kill-SIGpidcustomsignaltrap"echo'signalSIGINTreceived'"SIGINT扩展技巧1:nohup的由来:nohuppython3manage.pyrunserver&终端中断时(拔掉网线,wifi断开连接等),相关驱动会给当前会话(session,简单来说,一个登录shell就是一个会话)中的所有程序(前台和后台)发送挂断(HUP)信号,使程序退出。扩展技巧2:Ctrl-signalSIGQUITCtrl+J其实就是一个换行符。按Ctrl+I与按Tab键的效果相同。Ctrl+[与ESC相同。Ctrl+H取代了BackSpace键。鼠标右键快捷键:VK_APPS(93)2Foreplay-linux进程生命周期3Dinner4systemctlstopdocker案发现场鼠大叔的一篇博客systemd是系统的一个init程序,一个进程调度管理程序,带有id为1,所有进程的父systemctl为systemd的shell接口,常用操作:systemctlstart|stop|status|reloadsystemctlstopdockerservice行为定义在/usr/lib/systemd/system/docker的man中.servicesystemdstop:当请求停止服务时,通过发送KillSignal=(SIGTERM)中指定的信号终止进程。dockerdtrapsystemctlstopdockerd执行后会向dockerd发送一个SIGTERM信号。dockerd捕获到这个信号后,会调用cleanup程序来清理它下面的容器。同时,计数器加一。当收到3次SIGTERM或者SIGINT(比如按ctrl-c),会触发“forceexitwithoutcleanup”强制退出dockerd,这会导致dockerd退出,但是容器没有退出,所以容器占用但是资源(ip地址等)不会被释放。另外,如果kill-9,会发送SIGKILL强行killdockerd,但不会清空容器。所以用ctrl-c,用kill-9啊!!//*如果收到SIGINT或SIGTERM,调用`cleanup`,然后进程终止。//*如果在清理之前收到3次SIGINT或SIGTERM完成后,//跳过清理并立即终止进程(允许强制退出卡住的守护进程)//*SIGQUIT总是导致退出而不进行清理,在exit.c之前有一个goroutine转储:=make(chanos.Signal,1)//我们将在这里处理INT、TERM、QUIT、SIGPIPE。处理信号'%v'",sig))switchsig{caseos.Interrupt,syscall.SIGTERM:ifatomic.LoadUint32(&interruptCount)<3{//如果atomic.AddUint32(&interruptCount,1)==1{//调用提供的清理处理程序cleanup()os.Exit(0)}else{return}则仅启动清理一次}else{//收到3个SIGTERM/INT信号;强制退出而不清理logger.Info("强制docker守护进程关闭而不清理;收到3个中断")}casesyscall.SIGQUIT:DumpStacks("")logger.Info("强制docker守护进程关闭而不清理SIGQUIT")}这里。扩展Tips3:如何删除进程和子进程:进程和子进程在同一组,可以根据PGID杀掉一组进程kill---$PGIDkill使用默认信号(TERM=15)kill-9-$PGID使用KILL信号杀死(9)其他方法5我要更多《Unix 环境高级编程》学C!