Вывод из strace в другое окно

Позволяет сказать, что я хочу узнать, как работает pry strace .

Можно ли перенаправить вывод из strace в другое окно?

Поэтому у меня может быть два окна, один для подглядывания, где я делаю все взаимодействие, и другое окно вывода strace .

Вы можете использовать strace -p в одном окне, чтобы трассировать команду, запущенную в другом окне. Параметр -p принимает один или несколько идентификаторов процесса, поэтому вы можете, например, попробовать

 strace -p "$(pidof pry)" 

если у вас есть хотя бы один процесс, который pidof распознает как pidof . Возможно, вам нужно будет поэкспериментировать с pidof (если я хочу pudb3 команду pudb3 , мне нужно использовать python3 а не pudb3 ), и использование pidof может быть не лучшим, если с ним связана какая-либо неоднозначность (у вас может быть несколько команд которые совпадают, но только хотят strace один из них). Возможно, было бы проще найти правильный процесс с ps и предоставить опцию напрямую.

Этот подход вряд ли будет хорошо работать с непродолжительным процессом или в ситуации, когда важно увидеть результат с самого раннего времени процесса, но для интерактивного приложения, время запуска которого не особенно интересно, возможно, это будет работоспособный.

Одно отличие от использования strace -p в отличие от strace без -p – это то, как обрабатываются прерывания. Процесс, запущенный strace будет иметь прерывания, такие как Ctrl-C, переданные вместе с ним (и сообщается strace ), но Ctrl-C в strace -p отключит его и позволит продолжить процесс без трассировки (и Ctrl-C все еще работает в приложении, если оно находится в отдельном окне).

И метод обертки для недолговечных процессов или там, где важно видеть результат с самого раннего времени жизни процесса:

 #!/bin/sh # the pid could be sent to a file or named pipe the-thing-that-does- # strace could be watching, though in most cases a human could copy it echo "PID to strace is $$" trap : USR2 # block while human copies pid over to strace (or some program acts on # the above pid being written in that other terminal). Busy loop or # something instead if this program must not consume input (`sleep` # complicates the signal handling) read blocking # then when strace is up, send this process a USR2 signal. this will # mean there will be some strace of this script in addition to the # target, hence the kinda sorta caveat. exec echo /the/program/of/interest 

Или вместо этого просто запустите sysdig в этом другом терминальном окне, так как sysdig может sysdig непосредственно в программе по имени:

 sysdig -p '%proc.name %evt.type(%evt.args)' \ proc.name contains /the/program/of/interest