2012-10-03 90 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 

运行它。

相关问题