Вывод одной команды передается на другой; как закрыть оба?

Я называю Qt Assistant, как предлагается в stackoverflow :

nc -lkU ~/.assistantfifo | assistant -enableRemoteControl & 

Окно Qt Assistant открывается, и если я вызываю jobs , он возвращает:

 [1] + running nc -lkU ~/.assistantfifo | assistant -enableRemoteControl 

Затем я закрываю Qt Assistant (просто нажав «x»). Теперь jobs возвращаются:

 [1] + running nc -lkU ~/.assistantfifo | done assistant -enableRemoteControl 

Итак, nc продолжает работать, и я должен ввести killall nc .

Как сделать nc закончить тоже, когда я закрываю Qt Assistant? Или, наверное, я должен сделать это как-то иначе?

  • kill -9 не может убить процесс с родительским PID = 1
  • Как я могу убить процесс, выполняющийся на определенном IP-адресе и порту?
  • Как закрыть терминал, не убивая его детей (без запуска `screen`)?
  • Почему «kill -l» дает разные результаты в рыбе и bash
  • Выполняет ли дочерний процесс fork оболочки в bg сигналы SIGSTOP от родителя?
  • Как убить процесс после отсоединения его от bash?
  • Неужели Linux начнет убивать мои процессы, не спрашивая меня, не хватает ли памяти?
  • PID процесса bash не захвачен $!
  • 2 Solutions collect form web for “Вывод одной команды передается на другой; как закрыть оба?”

    Команда, которую вы запускаете ( nc aka netcat ), будет прослушивать ввод при запуске с флагом -l . Обычно netcat в режиме прослушивания закрывается, когда он получает символ конца файла, но флаг -k предотвращает это. Другими словами, netcat не будет закрываться, пока вы не убьете его из-за того, как вы вызывали команду.

    См. Справочную страницу для получения дополнительной информации.

    Если вы хотите отделить второй процесс, вам также необходимо сгруппировать их с помощью

     $ ( nc -lkU ~/.assistantfifo | assistant -enableRemoteControl ) & 

    иначе это не сработает. Скобки необходимы для отсоединения обоих процессов.

    Linux и Unix - лучшая ОС в мире.