Продолжается ли pkill (и его родительские процессы)?

Я пишу сценарий bash, который убивает кучу процессов, выбранных по определенным критериям, а затем завершает работу. Единственная проблема заключается в том, что эти критерии применимы к сценарию и его родительским процессам ( bash , sshd ), поэтому, чтобы избежать убийства скрипта до того, как он выполнил свою работу, я сначала получаю соответствующие процессы с ps , а затем отфильтровываю скрипта и его родителей с sed и, наконец, убить оставшиеся процессы с помощью kill .

Теперь я задаюсь вопросом, могу ли я упростить это для одного вызова pkill , но, очевидно, это может работать, только если pkill гарантированно убивает себя и его родительские процессы, если они происходят в списке процессов, которые нужно убить.

Есть ли такая гарантия, внедренная в pkill ?

pkill никогда не убивает себя, точно так же, как списки pgrep nerver; pkill , убивая каждый процесс, соответствующий критериям, за исключением самого себя. pkill действительно убивает своего родителя (ов), если он (они) соответствует критериям, но если родитель является оболочкой, если вы не используете неистребимый сигнал (обычно только -9 aka – [SIG] KILL), оболочка обычно игнорирует его. Если он включает в себя ваш sshd , который действительно убьет ваш сеанс, а вместе с ним ваша оболочка и (большинство?) Других процессов, что обычно нежелательно.

Вы можете использовать pgrep для поиска процессов, возможно, с -l или -lf , и выполнять дополнительные проверки перед их kill .