Процесс открывает tty, но "ps t tty" не видит его

Смотрите следующий пример:

[STEP 101] # tty
/dev/pts/3
[STEP 102] # ssh -f -n -N -D :7070 127.0.0.1
[STEP 103] # pgrep -lf 7070
33109 ssh
[STEP 104] # ls -l /proc/33109/fd/
total 0
lrwx------ 1 root root 64 2016-11-08 10:45 0 -> /dev/pts/3
lrwx------ 1 root root 64 2016-11-08 10:45 1 -> /dev/pts/3
lrwx------ 1 root root 64 2016-11-08 10:45 2 -> /dev/pts/3
lrwx------ 1 root root 64 2016-11-08 10:45 3 -> socket:[3328390]
lrwx------ 1 root root 64 2016-11-08 10:45 4 -> socket:[3328441]
[STEP 105] # ps t pts/3
   PID TTY      STAT   TIME COMMAND
 33115 pts/3    R+     0:00 ps t pts/3
 66586 pts/3    Ss     0:08 /root/bin/bash
[STEP 106] #

На этапе 104 это показывает ssh процесс открывается pts/3 но почему ps t pts/3 команда на шаге 105 не может видеть это?

1 ответ

Решение

В соответствии с ps руководство:

t ttylist
       Select by tty.  Nearly identical to -t and --tty, but can also
       be used with an empty ttylist to indicate the terminal
       associated with ps.  Using the T option is considered cleaner
       than using t with an empty ttylist.

Здесь "выбор по tty" означает "выбор по управлению tty". А также ssh -f будет работать в фоновом режиме как демон, который не имеет контрольного tty. Смотрите вывод шага 111 в следующем примере:

[STEP 107] # tty
/dev/pts/28
[STEP 108] # ssh -D :7070 -f -n -N 127.0.0.1
[STEP 109] # pgrep -lf 7070
72531 ssh
[STEP 110] # ls -l /proc/72531/fd
total 0
lrwx------ 1 root root 64 2016-11-16 17:47 0 -> /dev/pts/28
lrwx------ 1 root root 64 2016-11-16 17:47 1 -> /dev/pts/28
lrwx------ 1 root root 64 2016-11-16 17:47 2 -> /dev/pts/28
lrwx------ 1 root root 64 2016-11-16 17:47 3 -> socket:[3572721]
lrwx------ 1 root root 64 2016-11-16 17:47 4 -> socket:[3572770]
[STEP 111] # ps p 72531 j
  PPID   PID  PGID   SID TTY TPGID STAT UID  TIME COMMAND
     1 72531 72531 72531 ?      -1 Ss     0  0:00 ssh -D :7070 -f -n -N 127.0.0.1
[STEP 112] #
Другие вопросы по тегам