Как я могу нюнуть разъем Unix Dgram, не имея путь к файлу?

В bash , если вы делаете:

$ cat <(ps -j)
  PID  PGID   SID TTY          TIME CMD
 3887 16480 16480 pts/29   00:00:00 bash
 3888  3888 16480 pts/29   00:00:00 cat
 3889 16480 16480 pts/29   00:00:00 ps
16480 16480 16480 pts/29   00:00:00 bash

В zsh :

$ cat <(ps -j)
  PID  PGID   SID TTY          TIME CMD
 3935  3935 16480 pts/29   00:00:00 ps
 3936  3936 16480 pts/29   00:00:00 cat
16480 16480 16480 pts/29   00:00:00 zsh

В ksh93 :

$ cat <(ps -j)
  PID  PGID   SID TTY          TIME CMD
 3946 16480 16480 pts/29   00:00:00 ps
 3947  3947 16480 pts/29   00:00:00 cat
16480 16480 16480 pts/29   00:00:00 ksh

Во всех оболочках 3 процесс ps находится в другой группе процессов, отличной от группы cat , которая является основной группой процессов терминала. zsh , по крайней мере, достаточно хорошо, чтобы перенаправить stdin туда на /dev/null , если это было tty, чтобы избежать проблем с этим, как многие оболочки делают для команд, выполняемых в фоновом режиме.

Ваша команда будет работать нормально, если stdin не был терминалом, но здесь, поскольку cat не находится в основной технологической группе терминала, считывание с терминала означает, что он получит сигнал SIGTTIN , который приведет к его приостановке. И здесь с этим не справляются изящно. В вашем случае, похоже, что SIGTTIN игнорируется или блокируется, чтобы получить ошибку EIO (которую вы получаете при попытке чтения с управляющего терминала, когда вы не находитесь в его основной группе процессов и игнорируете/блокируете SIGTTIN ).

Однако в

(head <(cat <&3)) 3<&0

мы запускаем субоболочку на переднем плане, и все процессы в ней в конечном итоге входят в ту же группу процессов, поэтому им разрешено считывать данные с терминала. При явном перенаправлении в zsh мы обходим перенаправление zsh из /dev/null . С другими снарядами

(head <(cat))

тоже сработает.

-121--84320-

Параллель Gnu позволит запускать несколько процессов из сценария оболочки параллельно, ожидая их завершения.

-121--205065-

Возможно, вы упустили это (из vsftpd.conf (5) ):

anon _ umask
Значение umask для создания файла установлено для анонимных пользователей. Примечание! Если требуется указать восьмеричные значения, запомните префикс "0", в противном случае значение будет рассматриваться как базовое целое число 10!

Default: 077 

5
24.07.2018, 19:09
0 ответов

Теги

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