Я запустил длительный фоновый процесс (dd
с участием /dev/urandom
) в моей консоли ssh. Позже пришлось отключиться. Когда я снова вошел в систему (на этот раз напрямую, без ssh), казалось, что процесс все еще запущен.
Я не уверен, что произошло - я не использовал disown
. Когда я вошел позже, процесс не был указан в top
сначала, но через некоторое время он восстановил высокий процент процессора, как я и ожидал. Так что я предполагаю dd
все еще работает.
Теперь я хотел бы увидеть прогресс. я использую kill -USR1 <pid>
но ничего не печатается. Есть ли способ снова получить результат?
Перенаправление всех выходных данных (stdout, stdin, stderr) может разъединить дочерний процесс с родительским.
Вы можете попробовать подключиться к процессу с помощью gdb, набрать «c» для продолжения и наблюдать за этой консолью, пока вы подключаете ее к другой.
gdb / bin / dd пид
Благодаря ответ кмарша и этот потоки Мне удалось перенаправить потерянный вывод (stderr) в файл:
gdb /bin/dd 2616
(gdb) p creat("/root/dd.stderr",0600)
[Switching to Thread 0x7f651ece56e0 (LWP 2616)]
$1 = 3
(gdb) p dup2(3,2)
$2 = 2
(gdb) p close(3)
$3 = 0
(gdb) q
После запуска kill -USR1 2616
Я могу катить свой новый файл:
631820341060 bytes (632 GB) copied, 81603.1 s, 7.7 MB/s
Вы можете увидеть результат, заглянув в /proc/(pid of your dd/fd/1
или /proc/(pid)/fd/2
. Поймайте это, затем ударьте по нему USR1 и посмотрите, что у вас получится.