Strace. Эмулятор терминала. Не отображается взаимодействие с иксами
Открываю новое окно эмулятора терминала konsole. Запускаю например команду yes. В старом окне запускаю команду и получаю примерно такой вывод.
sudo strace -Yyf -p $(pgrep -xn konsole) -s0
[pid 3376<konsole>] read(17</dev/ptmx>, ""..., 4095) = 4095
[pid 3376<konsole>] poll([...], 5, 8) = 1 ([...])
[pid 3376<konsole>] ioctl(17</dev/ptmx>, FIONREAD, [4095]) = 0
[pid 3376<konsole>] read(17</dev/ptmx>, ""..., 4095) = 4095
[pid 3376<konsole>] poll([...], 5, 9) = 1 ([...])
[pid 3376<konsole>] ioctl(17</dev/ptmx>, FIONREAD, [4095]) = 0
[pid 3376<konsole>] read(17</dev/ptmx>, ""..., 4095) = 4095
[pid 3376<konsole>] poll([...], 5, 10) = 1 ([...])
[pid 3376<konsole>] ioctl(17</dev/ptmx>, FIONREAD, [4095]) = 0
[pid 3376<konsole>] read(17</dev/ptmx>, ""..., 4095) = 4095
[pid 3376<konsole>] poll([...], 5, 10) = 1 ([...])
[pid 3376<konsole>] ioctl(17</dev/ptmx>, FIONREAD, [4095]) = 0
[pid 3376<konsole>] read(17</dev/ptmx>, ""..., 4095) = 4095
[pid 3376<konsole>] poll([...], 5, 6) = 1 ([...])
[pid 3376<konsole>] ioctl(17</dev/ptmx>, FIONREAD, [4095]) = 0
[pid 3376<konsole>] read(17</dev/ptmx>, ""..., 4095) = 4095
То есть вывод состоит из последовательности системных вызовов poll, ioctl, read. Которые опрашивают, читают файлы (Linux всё есть файл). Но в выводе нету ничего что отображало бы взаимодействие с иксами. Прочёл эмулятор данные из устройства, а дальше ничего. Почему?
Ответы (1 шт):
Системных вызовов много и в ваш кусок вывода просто не попало нужное. Сохраните вывод в файл и смотрите. Также strace умеет фильтровать. Делайте тоже самое только измените команду.
sudo strace -Yyfe '/^write' -p $(pgrep -xn konsole)
Теперь вы будете видеть вызовы которые начинаются с подстроки write. Интересующий вас вызов writev. Это и есть взаимодействие с иксами посредством сокета. И да pid здесь не причём. Хотелось бы чтоб люди вникали прежде чем пытаться "помогать".