В Linux, предполагая, что вы хотите знать, что записывается на тот же самый ресурс, к которому подключен stdout вашей оболочки, вы можете сделать:
strace -fe write $(lsof -t "/proc/$$/fd/1" | sed 's/^/-p/')
, что сообщит о системных вызовах write()
(на любом файловом дескрипторе) каждого процесса, у которого хотя бы один файловый дескриптор открыт на том же самом файле, что и fd 1 вашей оболочки.
Вы можете остановить обработку обоих запросов, отправив им SIGSTOP (заменить pid1 и pid2 на фактические PIDs или использовать killall
и имя приложения):
kill -SIGSTOP pid1 pid2
Печать на терминале (или в любое другое место, куда перенаправляется stdout) должна быть остановлена. Затем продолжите один из них, используя
kill -SIGCONT pid1
Если сообщения об ошибке появляются немедленно, то вы знаете, что это первый процесс. Если нет, то можно остановить его еще раз и продолжить второй...
Перед тем, как убить остановленный процесс, полезно отправить первый СИГКОНТ.
Эта же техника может быть использована с Ctrl-Z
и управляет заданием оболочки (fg %1
, bg %1
, kill %1
, ...).