Что означает «w» с urandom?

Программы, которые взаимодействуют с последовательными устройствами:

picocom
minicom
socat

или из оболочки, вы можете сделать:

stty -speed 19200 < /dev/ttyS0 # sets the speed of the port
exec 99<>/dev/ttyS0 (or /dev/ttyUSB0...etc)
printf "AT\r" >&99
read answer <&99  # this reads just a CR
read answer <&99  # this reads the answer OK
exec 99>&-
8
25.04.2017, 03:55
2 ответа

Как объяснялось в других ответах и ​​комментариях, причина того, что вы обратите внимание, как Bashобращается с трубами. Чтобы отфильтровать то, что вы очень хочется в подобных ситуациях можно попробовать заключить первую букву аргумента grepв []вот так:

$ strace w 2>&1 | grep random
read(4, "grep\0random\0", 2047)         = 12
$ strace w 2>&1 | grep '[r]andom'
$ strace w 2>&1 | grep '[c]lose'
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
close(3)                                = 0
(...)

РЕДАКТИРОВАТЬ:

Как правильно заметил Р. в комментарии ниже на самом деле straceделает не видеть другую сторону трубы. Аналогично ps aux | grep grepкоторый также показывает grep grepв своем выводе w, проходит через каталог /procи находит там процесс grep.

8
27.01.2020, 20:08

Из manpage w(1):

w отображает информацию о пользователях, находящихся в данный момент на машине, и их процессах

Чтобы отобразить процессы пользователей, программа просматривает все процессы, запущенные на машине. машине, и их процессах

Чтобы отобразить процессы пользователей, программа перебирает все процессы, запущенные на машине. Давайте попробуем это сделать:

$ strace -o w.trace w | grep whatever

Внутри трассировки мы находим такие строки (в системе Linux):

open("/proc/8286/cmdline", O_RDONLY)    = 4
read(4, "grep\0whatever\0", 2047)       = 14

Что показывает w, явно проходящий через /proc и просматривающий командные строки всех процессов (и другие вещи, не показанные). Он находит grep, который работает параллельно с ним, и это то, что strace видит, как он делает. Труба не имеет к этому никакого отношения, кроме запуска обоих процессов в одно и то же время. В некотором смысле это похоже на то, как если бы ps | grep увидел сам grep.

who и большинство других команд не нуждаются в информации о процессах и не ищут ее, поэтому при трассировке вы не увидите того же самого.

15
27.01.2020, 20:08

Теги

Похожие вопросы