2015-10-16 70 views
0

我一直在试图理解这段代码,但是我无法得到它的全部内容。我知道'init'是第一个启动过程,并且该程序用于启动或结束特定的服务。但是'kill'中的'cat'会做什么?当这个程序启动,停止和重新启动时,系统内部发生了什么?shell脚本中的初始化程序

#!/bin/sh 
test -f /usr/sbin/sshd || exit 0 
case "$1" in 
start) 
echo -n "Starting sshd: sshd" 
/usr/sbin/sshd 
echo "." 
;; 
stop) 
echo -n "Stopping sshd: sshd" 
kill `cat /var/run/sshd.pid` 
echo "." 
;; 
restart) 
echo -n "Stopping sshd: sshd" 
kill `cat /var/run/sshd.pid` 
echo "." 
echo -n "Starting sshd: sshd" 
/usr/sbin/sshd 
echo "." 
;; 
*) 
echo "Usage: /etc/init.d/sshd start|stop|restart" 
exit 1 
;; 
esac 
+0

我想你已经混淆了'init'进程和启动服务的'init.d'脚本。我可能有 –

+0

。你能解释一下我的代码吗? –

+0

这只是一个普通的shell脚本。你只需要阅读它看看它是什么。如果你不知道“猫”或“杀”是什么,那么我建议你看看他们的手册页。那个init脚本(init.d中的服务启动脚本被称为“init脚本”,这可能让你感到困惑)是'sshd'服务/守护进程的脚本。 'init'进程/程序也有一个手册页。 –

回答

0

如果是在UNIX操作系统启动时它会运行/etc/init.d下所有的脚本,这其中之一,有“开始”的说法。该脚本然后调用/ usr/sbin/sshd,它分叉后台进程并终止。后台进程将再次分叉,其子将成为恶魔进程。恶魔进程将其PID写入/var/run/sshd.pid并开始服务。在OS关闭后,该脚本将再次以“stop”参数被调用。它会从文件中收集恶魔的PID,并优雅地终止它(没有切换kill会发送SIGTERM,就好像'kill -15 $ pid'一样)。

+0

'它会运行/ etc/init.d'中的所有脚本 - 这不完全正确。 '/ etc/init.d'中有许多脚本,它们只能根据'runlevel'(现在是'systemd target')运行。在旧的init脚本启动下运行的是由'/ etc/init.d/rcS.d /'中的软链接确定的,然后是'/etc/init.d/rc [0-6] .d /'任何给定的运行级别[0-6]'。 '/ etc/init.d /'中还有其他脚本用于安装软件包,但未配置为在引导时运行。 –