2015-07-30 3 views
0

Я пытаюсь отправить сигнал SIGTSTP дочернему процессу. Проблема, с которой я сталкиваюсь, заключается в том, что отправка SIGTSTP в дочерний процесс останавливает всю мою программу, и вызывающий не может продолжить выполнение остальной части программы. Вот мой кодОтправка SIGTSTP приостанавливает всю программу

cmd := exec.Command("ping", "google.com") 
stdout, _ := cmd.StdoutPipe() 
cmd.Start() 
io.Copy(os.Stdout, stdout) 
cmd.Wait() 

Выполнение этого кода, я получаю выход из ping google.com напечатанный на терминале. Когда я нажимаю ctrl-z, выход останавливается, но программа больше не может принимать сигналы или делать что-либо еще, если SIGCONT не отправляется дочернему процессу. Я что-то упускаю? Как приостановить дочерний процесс, но возобновить выполнение вызова? Благодарю.

ответ

2

Wait ждет выхода команды. Ваш дочерний процесс не выходит, он просто приостановлен, поэтому Wait не возвращается.

+0

hmm Как приостановить его, не заблокировавшись ожиданием? – seal198

+0

Не ждите, что это блокирование. Это io.Copy, который не возвращается после приостановки дочернего процесса. io.Copy возвращается только на EOF. – seal198

Смежные вопросы