【发布时间】:2021-06-06 01:09:15
【问题描述】:
我按照link 在 Linux 中创建了一个守护进程。在我开始调用 ioctl 之前它运行良好。似乎对 ioctl 的任何调用都被完全忽略了。我正在使用 ioctl 设置终端和键盘模式。示例代码如下。该代码无需将其作为守护程序运行即可工作。我必须做其他事情才能让 ioctl 工作吗?
int main(int argc, char **argv)
{
skeleton_daemon(); // Function is the exact same as in the link
int term = open("/dev/tty1", O_RDWR);
syslog(LOG_NOTICE, "First daemon started.");
sleep(5);
// Should freeze the terminal and keyboard input but doesn't when running as daemon
ioctl(term, KDSETMODE, KD_GRAPHICS);
ioctl(term, KDSKBMODE, K_OFF);
ioctl(term, 0x4B51, 1);
sleep(5);
ioctl(term, KDSETMODE, KD_TEXT);
ioctl(term, KDSKBMODE, previousMode);
ioctl(term, 0x4B51, 0);
syslog(LOG_NOTICE, "First daemon terminated.");
closelog();
return EXIT_SUCCESS;
}
【问题讨论】:
-
正如@Glärbo 的回答中所解释的,守护进程没有控制 tty。它与它分离。您引用的链接将其分离。即使它有一个,这个控制终端也会是“/dev/tty”,它是进程控制终端的同义词(不是硬编码值/dev/tty1)。