Назад | Перейти на главную страницу

Почему "pkill /?" убить мою сессию SSH?

После выполнения следующих команд (bash) от имени пользователя root через SSH:

    pkill --help
    pkill -h
    pkill /?

Первые две команды не предоставили мне никакой информации, поэтому запустила третью (как бы инстинктивно ...).

Далее произошло то, что мой сеанс SSH с сервером закрылся, и он не смог подключиться повторно. Я предполагаю, что он остановил все (или большую часть) запущенных процессов, включая демона, отвечающего за такие сеансы.

Я бы хотел понять Зачем это произошло: какова точная оценка (пошаговая) моего вклада и к чему это привело.

Я предполагаю, что это как-то связано с оценкой оболочки '?' символ, который, вероятно, преобразовался в список из нескольких односимвольных выражений, которые были переданы в pkill, который, в свою очередь, закрыл эти PID.

В CentOS 5.2 страница руководства предоставляется при запуске man pkill говорит, что интерпретирует /? как расширенное регулярное выражение для имен процессов или командных строк.

Так что ? означает, что предыдущий символ может появиться, а может и не появиться. Поскольку был только один другой символ, /, то pkill убивал все процессы, которые мог.

В системах Linux постарайтесь запомнить команду man, чтобы сначала получить документацию.

Бегать pgrep /?...

Это вернет PID процессов, соответствующих этому шаблону оболочки. Бег pkill с тем же параметром убьет все перечисленное в pgrep /? вывод.

Я думаю, что вы убивали свою собственную сессию, а также ряд других процессов (в данном случае все PID).

Синтаксис выражений командной строки /switch1 /switch2 это вещь Windows / DOS. В Linux и всех известных мне UNIX синтаксис аргументов командной строки --switch -s. /? рассматривается как регулярное выражение. Регулярное выражение /?, по крайней мере, насколько я могу судить по grepстраница руководства, будет соответствовать 0 или 1 /es. Это, кажется, не объясняет, почему это убило SSH, но объясняет, что произошло.