您的位置 首页 > 德语词汇

trap(活学活用掌握trap命令)

本篇文章给大家谈谈trap,以及活学活用掌握trap命令对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

trap(活学活用掌握trap命令)

trap命令用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作。当shell接收到sigspec指定的信号时,arg参数(通常是执行命令)会被读取,并被执行。

开始掌握基本的使用方式和方法

[3]常用的信号量

Alwaysrunonshellexit,regardlessofexitcode

纸上得来终觉浅,绝知此事要躬行。

#on_exitandadd_on_exit\n#Usage:\n#add_on_exitrm-f/tmp/foo\n#add_on_exitecho"Iamexiting"\n#tempfile=$(mktemp)\n#add_on_exitrm-f"$tempfile"\n\nfunctionon_exit(){\nforiin"${on_exit_items[@]}";do\neval$i\ndone\n}\n\nfunctionadd_on_exit(){\nlocaln=${#on_exit_items[*]}\non_exit_items[$n]="$*"\nif[[$n-eq0]];then\ntrapon_exitEXIT\nfi\n}\n\nadd_on_exitecho"Iamexiting"\n[2]捕获SIGINT或Ctrl+C

#Runacommandonsignal2(SIGINT,whichiswhat^Csends)\nfunctionsigint(){\necho"Killedsubshell!"\n}\n\ntrapsigintINT\n\n#Thiswillbekilledonthefirst^C\necho"Sleeping..."\nsleep500\necho"Sleeping..."\nsleep500\n

#pressing^Ctwiceinasecondtoquit\nlast=0\nfunctionallow_quit(){\n[$(date+%s)-lt$(($last+1))]&&exit\necho"Press^Ctwiceinarowtoquit"\nlast=$(date+%s)\n}\n\ntrapallow_quitINT[3]清理临时文件

#Makeacleanupfunction\nfunctioncleanup(){\nrm--force--"${tmp}"\n}\n\n#Trapspecial"EXIT"group,whichisalwaysrunwhentheshellexits.\ntrapcleanupEXIT\n\n#Createatemporaryfile\ntmp="$(mktemp-p/tmptmpfileXXXXXXX)"\necho"Hello,world!">>"${tmp}"\n[4]在退出时杀死子进程

#killallspawnedchildprocessesoftheshellonexit\ntrap'jobs-p|xargskill'EXIT\n[5]对终端窗口大小的变化做出反应

#signalWINCH(WINdowCHange)thatisfiredwhenoneresizesaterminalwindow\ndeclare-xrowscols\n\nfunctionupdate_size(){\nrows=$(tputlines)#getactuallinesofterm\ncols=$(tputcols)#getactualcolumnsofterm\nechoDEBUGterminalwindowhasno$rowslinesandis$colscharacterswide\n}\n\ntrapupdate_sizeWINCH\n3.删除进程树

一条命令也可以完成一个脚本的工作量

#HowtogetPID,PGID,sessionidetc?\n$ps-opid,ppid,pgid,gid,sess,cmd-Uroot\nPIDPPIDPGIDGIDSESSCMD\n

#1.killagroupofprocesseswithnegativePID(ProcessID)\n$kill-TERM-PID\n\n#2.killagroupofprocesseswiththeirPGID(ProcessGroupID)\n$kill---$PGIDKillusingthedefaultsignal(TERM=15)\n$kill-9-$PGIDKillusingtheKILLsignal(9)\n\n#3.killagroupprocesseswithonlyPIDinfo\n$kill---$(ps-opgid=$PID|grep-o[0-9]*)\n\n#4.Usingpkill,killprocessesbyPGID(ProessGroupID)\n$pkill-9-g$PGID\n\n#5.Usingpkill,killprocessesbyGID(GroupID)\n$pkill-9-G$GID\n\n#6.Usingpkill,killprocessesbyPPID(ParentProcessID)\n$pkill-9-p$PPID\n\n#7.Usingpkill,killprocessesbyterminal\n$pkill-9-t$terminal\n\n#8.Usingpkill,killprocessesbyprocessname\n$pkill-9-x$process_name\n\n#9.Usingpkill,killprocessesbysession\n$pkill-9-s$sess\n

新的一年

关于trap到此分享完毕,希望能帮助到您。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023