it process failed.'
? ? ? ? ? ? exit 1
? ? ? ? fi
关闭已启动的mysql server,可能很多人会感到好奇,不是提供mysql服务么?为什么还要关闭呢?
答案就在于dockerfile中CMD的命令为 ["mysqld"],如果不关闭的话,这里就无法启动。
这里比较有意思的还是在于脚本部分,
一、关于kill,kill命令是通过向进程发送指定的信号来结束进程的。
-s的意思是Specify the signal to send.? The signal may be given as a signal name or number.指定需要发送的信号.
如果没有指定发送信号,那么默认值为TERM信号。
关于-TERM和-9的区别
kill -TERM PID:TERM是请求彻底终止某项执行操作.它期望接收进程清除自给的状态并退出,它是一种较温和的方式。
kill -9 PID:
这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。危害是导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。
当使用此命令时,一定要通过ps -ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。
如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表
二、关于||运算符
关于&&和||的区别
command1 && command2 :左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行。
command1 || command2:左边的命令(命令1)执行失败了,就执行右边的命令(命令2)。
三、关于wait
wait命令用来等待指令的完成,直到其执行完毕后返回终端。
所以这段脚本的逻辑是首先用kill -s TERM "$pid"的方式关闭mysqld进程,如果执行成功了,则! kill -s TERM "$pid"的结果为false,这时候就执行wait "$pid",wait是等待mysqld的关闭,mysqld关闭完毕后,wait "$pid"结果为真,此时! wait "$pid"结果为假。echo语句就不执行。
至此,分析完毕~