2015-10-16 3 views
0

Я пытался понять этот код, но я не мог его получить. Я понял, что «init» - это первый процесс запуска и эта программа используется для запуска или завершения конкретной упомянутой службы. Но что делает «кот» в «kill»? Что происходит в системе, когда эта программа запускается, останавливается и перезапускается?init-программа в скрипте оболочки

#!/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

Это обычный сценарий оболочки. Вам просто нужно прочитать его, чтобы посмотреть, что он делает. Если вы не знаете, что такое 'cat' или' kill', тогда я предлагаю вам посмотреть на страницы man для них. Этот сценарий инициализации (стартовые скрипты службы, которые живут в init.d, называются «скриптами инициализации», что, вероятно, вас смущает) является скриптом для службы/sshd. 'init' процесс/программа также имеет справочную страницу. –

ответ

0

Когда Unix OS запускается он будет запускать все скрипты в /etc/init.d, среди них этот, с «старт» аргумент. Затем скрипт вызывает/usr/sbin/sshd, который разворачивает фоновый процесс и завершается. Фоновый процесс снова будет вилкой, и его ребенок станет демоном. Процесс demon записывает свой PID в /var/run/sshd.pid и начинает обслуживание. После завершения работы ОС этот скрипт снова будет вызван с аргументом «stop». Он соберет ПИД-код демона из файла и прекратит его изящно (без отключения kill отправляет SIGTERM, как будто «kill -15 $ pid»).

+0

'он будет запускать все скрипты в/etc/init.d' - это не совсем так. В '/ etc/init.d' есть несколько скриптов, которые запускаются только в зависимости от' runlevel' (теперь 'systemd target'). Которые запускались при старте старого сценария инициализации, определялись софт-ссылками в '/ etc/init.d/rcS.d /', а затем '/etc/init.d/rc [0-6] .d /' для любой заданный уровень выполнения '[0-6]'. Были и другие сценарии в '/ etc/init.d /', которые были для установленных пакетов, но не настроены для запуска при загрузке. –

Смежные вопросы