У меня есть два экземпляра запущенного процесса. Одним из них является "ОТКРЫТИЕ!" и ошибки печати без остановки на STDOUT.
Я хочу убить прерванный процесс, но я должен убедиться, что не прервал неправильный. Они оба были запущены в одно и то же время, и top
я вижу, что они используют примерно одинаковый объем памяти и процессора. Я не могу найти ничего, что указывает на то, какой процесс ведет себя плохо.
Самое безопасное - выяснить, какой процесс / pid пишет в STDOUT.
Есть ли способ сделать это?
/dev/null
). Вы уверены, что не имеете в виду конкретный файл (например, терминальное устройство или файл журнала ...)?Ответы:
В Linux, если вы хотите знать, что пишет на тот же ресурс, к которому подключен стандартный вывод вашей оболочки, вы можете сделать:
Это сообщит о
write()
системных вызовах (для любого файлового дескриптора) каждого процесса, у которого открыт хотя бы один файловый дескриптор в том же файле, что и fd 1 вашей оболочки.источник
Вы можете остановить обе обработки, отправив им SIGSTOP (замените pid1 и pid2 действительными идентификаторами PID или используйте
killall
и имя приложения):Печать на терминале (или везде, куда перенаправляется стандартный вывод) должна прекратиться. Затем продолжите один из них, используя
Если сообщения об ошибках появляются немедленно, вы знаете, что это первый процесс. Если нет, вы можете остановить это снова и продолжить второй ...
Перед тем, как убить остановленный процесс, рекомендуется отправить первый SIGCONT.
Тот же метод может быть использован с
Ctrl-Z
и контроль оболочки вакансии (fg %1
,bg %1
,kill %1
...).источник