2

標準出力と標準エラーの両方が /dev/null にリダイレクトされている場合でも、vncpasswd プログラムはどのようにコンソールに出力を生成しますか?

$ vncpasswd > /dev/null 2> /dev/null
Password: 

編集:これは部分的なstraceです:

open("/dev/tty", O_RDWR|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost -isig icanon -echo ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig icanon -echo ...}) = 0
fstat(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(5, 0), ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig icanon -echo ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb7c3eda000
write(3, "Password: ", 10Password: )              = 10
read(3, 
4

3 に答える 3

3

端末を開き、そこに次のように書き込みます。

open("/dev/tty", O_RDWR|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = 3
...
write(3, "Password: ", 10Password: )              = 10

setsidそれを不可能にしたい場合は、それを実行してください。

于 2012-10-03T21:59:51.780 に答える
3

基礎となる端末を直接開いています(のようなものopen("/dev/tty", ...))。いくらリダイレクトしても、それを取り除くことはできません。見たくない場合は、ttyに接続せずに実行する必要があります(たとえばcron、何かを介して)。

于 2012-10-03T21:03:55.507 に答える
0

代わりに試すためにリダイレクトstderrしているだけです。/dev/nullvncpasswd &> /dev/null

于 2012-10-03T20:55:35.543 に答える