linuxkill命令以及USR1信号解释

linuxkill命令以及USR1信号解释

2023年7月13日发(作者:)

linuxkill命令以及USR1信号解释下⾯是⼀个nginx⽇志⽂件切割的计划任务[root@proxy ~]# vim /usr/local/nginx/#!/bin/bashdate=`date +%Y%m%d`logpath=/usr/local/nginx/logsif [ -f $logpath/ ];then mv $logpath/ $logpath/access-$ mv $logpath/ $logpath/error-$ kill -USR1 $(cat $logpath/)fi[root@proxy ~]# crontab -e03 03 * * 5 /usr/local/nginx/ 咱们先来看看 kill -USR1 $(cat $logpath/) 这条命令做了些什么 1 ⾸先确定⼀下/usr/local/nginx/logs/ 这个⽂件存储的是nginx的pid号,当启动nginx这个程序时会⾃动⽣成这个⽂件,当关闭nginx程序时,这个的⽂件就会消失。[root@proxy ~]# ss -antulp | grep nginxtcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=3960,fd=6),("nginx",pid=3959,fd=6),("nginx",pid=3958,fd=6))[root@proxy ~]# cat /usr/local/nginx/logs/

3958##################################################################[root@proxy ~]# nginx -s stop[root@proxy ~]# cat /usr/local/nginx/logs/

cat: /usr/local/nginx/logs/: 没有那个⽂件或⽬录2 $(cat $logpath/)相当与`cat $logpath/` 它拿到的是nginx的进程pid号,我这⾥的是3958 那么完整命令为:kill -USR1 3958

-USR1代表什么呢 ,我们接着往下看[root@proxy ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+338) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-758) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX

在linux系统中,linux是通过信号与”正在运⾏的进程”进⾏通信的。linux系统中,也有很多预定义好的信号,像常⽤的SIGHUP,SIGKILL,SIGSTOP等。USR1对应的数字选项为 -10 ,那么nginx收到USR1的信号后,它都做了些什么(1 )nginx 的主进程收到USR1信号,会重新打开⽇志⽂件(以nginx配置⽂件中的⽇志名称命名,就是配置⽂件中access_log项所设置的值,如果⽂件不存在,会⾃动创建⼀个新的⽂件)。

[root@proxy ~]# /usr/local/nginx/[root@proxy ~]# ls /usr/local/nginx/logs/ # 执⾏脚本后(2)然后把⽇志⽂件的拥有者改为“⼯作进程(worker进程)”,⽬的是让worker进程就具备了对⽇志⽂件的读写权限(master和worker通常以不同⽤户运⾏,所以需要改变拥有者)。

[root@proxy ~]# ll /usr/local/nginx/logs/

-rw-r--r--. 1 nginx root 0 11⽉ 3 13:25 /usr/local/nginx/logs/[root@proxy ~]# ll /usr/local/nginx/logs/

-rw-r--r--. 1 root root 204608511 11⽉ 3 10:44 /usr/local/nginx/logs/##注意观察这两个⽂件的所有者不⼀样

(3)nginx主进程会关闭重名的⽇志⽂件(也就是刚才使⽤mv命令重命名成-$的⽂件),并通知⼯作进程使⽤新打开的⽇志⽂件(刚才主进程打开的⽂件)。具体实现上更细化点就是,主进程把USR1信号发给worker,worker接到这个信号后,会重新打开⽇志⽂件(也就是配置⽂件中约定的)

3 结合上⾯的 kill -l 命令补充⼀下只有第9种信号(SIGKILL)才可以⽆条件终⽌进程,其他信号进程都有权利忽略。 下⾯是常⽤的信号:HUP 1 终端断线,重新加载配置⽂件,平滑升级INT 2 中断(同 Ctrl + C)QUIT 3 退出(同 Ctrl + )TERM 15 终⽌ (如果kill 命令后直接加进程的pid号 默认选项为-15 ,代表终⽌此进程)KILL 9 强制终⽌CONT 18 继续(与STOP相反, fg/bg命令)STOP 19 暂停(同 Ctrl + Z)

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689199929a219979.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信