Как убить все (дочерние )процессы в дереве процессов, укорененные в конкретном процессе, но не в самом процессе?

В документации обычно используется термин «конвейер», который состоит из одной или нескольких команд, см. определение POSIX С технической точки зрения, у вас есть две команды, два подпроцесса для оболочки (либо fork()+exec()внешние команды, либо подоболочки)

Что касается части производителя -потребителя , конвейер может быть описан этим шаблоном, поскольку:

  • Производитель и Потребитель совместно используют буфер фиксированного -размера, и, по крайней мере, в Linux и MacOS X существует фиксированный размер буфера конвейера
  • Производитель и Потребитель слабо -связаны, команды в конвейере не знают о существовании друг друга (, если они активно не проверяют /proc//fdкаталог ).
  • Производители пишут в stdout, а потребители читают stdin, как если бы они были одной выполняемой командой, иначе они могут существовать друг без друга .

Разница, которую я здесь вижу, заключается в том, что в отличие от Producer -Consumer на других языках, команды оболочки используют буферизацию и выводят стандартный вывод после заполнения буфера,но нет упоминания о том, что производитель -потребитель должен следовать этому правилу -только ждать, когда очередь заполнится, или отбрасывать данные (, чего конвейер не делает ).

0
05.10.2020, 10:46
1 ответ

Пакет pslistсодержит rkill, который может убить всех потомков:

список мужчин:

The pslist utility examines the list of current processes to find a specified process and all its descendants. [..]

When invoked as rkill, this utility does not display information about the processes, but sends them all a signal instead. If not specified on the command line, a terminate (SIGTERM) signal is sent.

Вам нужно только указать pid git.

(доступно на ubuntu/arch/etc.)

1
18.03.2021, 23:00

Теги

Похожие вопросы