Я только что написал сценарий оболочки для управления запуском и остановкой модуля. Все кажется нормальным, пока не нахожу, что команда остановки приводит к чему-то неожиданному.linux shell kill signal SIGKILL && KILL
Я использую команду kill -s SIGKILL -- -gpid
, чтобы убить группу процессов. Я использую /bin/sh
запустить команду, как этот
/bin/sh -c "kill -s SIGKILL -- -gpid"
который ответил ошибку
/bin/sh: line 0: kill: SIGKILL: invalid signal specification
Тогда я заменил /bin/sh
с /bin/bash
, поэтому команда
/bin/bash -c "kill -s SIGKILL -- -gpid"
, который не ответил ничего ошибка. поэтому я завершаю объяснение, что разница между bash и sh вызывает результат. Однако, когда я ls
/bin/sh
, я обнаружил, что /bin/sh
является символической ссылкой на /bin/bash
, поэтому команда должна быть одинаковой.
Я нашел синтаксис команды kill -s SIGKILL
не в синтаксисе, рекомендованном, kill -s KILL
.
поэтому я заменил SIGKILL с УБИЙСТВО, команда
/bin/sh -c "kill -s KILL -- -gpid"
который ответил ничего ошибку. как описано выше, любой может объяснить это дело.
Какое качество вы пользуетесь? На моем Ubuntu 12.04 '/ bin/sh' фактически указывает на'/bin/dash'.Может ли быть так, что в вашем тоже «тире», и вы читаете «bash»? – Shahbaz
Когда 'bash' вызывается как' sh' (например, через symlink, как в вашем случае), он использует режим совместимости sh, где большинство современных функций отключены. Я бы поспорил, что 'sh' вызывает внешний двоичный файл для' kill', и он не распознает 'SIGKILL', но вызов' bash' использует свой встроенный, и это встроенное. – Kevin
@ Kevin, делает bash так, проверяя его 'argv [0]'? – Shahbaz