问题:使用swoft框架时,重启项目时报 地址已在使用的错误,没有对应pid文件
解决:添加对应pid文件,然后重启
ps -ef | grep "project-admin manager" | grep -v grep | awk '{print $3","$2}' > @DIR/project-admin.pid && chown nginx:nginx @DIR/project-admin.pid
问题2: 为什么启动后没有对应pid文件
TODO
这里的进程锁是通过记录一个PID文件,避免两个进程同时运行的文件锁。
进程锁的作用之一就是可以协调进程的运行,例如使用crontab每一分钟执行一个任务,但这个进程运行时间可能超过一分钟,如果不用进程锁解决冲突的话两个进程一起执行就会有问题。
使用PID文件锁还有一个好处,方便进程向自己发停止或者重启信号。进程起来后就会把当前的PID写入这个文件,当然如果这个文件已经存在了,也就是前一个进程还没有退出,那么服务就不会重新启动。
一个进程向另一个进程发送信号,另一个进程可以去处理这个信号,通过kill -l查看所有信号。1-31为不可靠信号
1、SIGHUP
在终端断开时系统向终端控制的进程发送这个信号,如果父进程退出导致进程组成为孤儿进程组,该信号会发送到进程组下所有进程中
在守护进程中通常用来重载配置文件
2、SIGINT
同Ctrl + C
3、SIGQUIT
同Ctrl +
9、SIGKILL
强制停止、立即结束进程,SIGKILL信号不会被忽略、捕获
10、SIGUSR1
用户自定义信号,默认为杀掉进程
12、SIGUSR2
用户自定义信号,默认为杀掉进程
14、SIGALRM
时钟定时信号,计算的是实际的时间或时钟时间
15、SIGTERM
结束进程,与SIGKILL区别在于该信号可以被阻塞和处理,用来要求进程自身正常退出
17、SIGCHLD
子进程结束,父进程会收到SIGCHLD信号
19、SIGSTOP
停止进程,如果进程没有执行完,则暂停执行。SIGSTOP不会被忽略、捕获
20、SIGTSTP
同Ctrl + Z
Github:https://github.com/justin-yj/process-framework



