程序显示控制台输出,即使重定向stdout和stderr

时间:2012-10-03 20:53:42

标签: linux unix console

即使标准输出和标准错误都被重定向到/ dev / null,vncpasswd程序如何在控制台上产生输出?

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

编辑:这是一个偏袒:

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 个答案:

答案 0 :(得分:3)

它正在直接打开基础终端(类似open("/dev/tty", ...))。没有多少重定向将摆脱它。如果您不想看到它,则必须运行它而不是附加到tty(例如通过cron或其他东西)。

答案 1 :(得分:3)

它打开你的终端并在那里写道:

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

如果您想让它变得不可能,请在setsid下运行。

答案 2 :(得分:0)

您只需将stderr重定向到/dev/null尝试vncpasswd &> /dev/null