2012-10-03 70 views
2

即使標準輸出和標準錯誤都已重定向到/ dev/null,vncpasswd程序如何在控制檯上生成輸出?即使stdout和stderr被重定向,程序也會顯示控制檯輸出

$ 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, 

回答

3

它直接打開底層終端(如open("/dev/tty", ...))。沒有任何數量的重定向會消除這一點。如果你不想看到它,你必須運行它不附加到tty(例如通過cron或其他)。

0

你只是重定向到stderr嘗試/dev/null代替vncpasswd &> /dev/null

+0

我希望它們都重定向到/ dev/null。 –

+0

請參閱更新。 – none

+0

不,還是不行。 –

3

它打開你的終端和寫入有:如果你想那是不可能的setsid

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

運行它。

相關問題