[英]How do I hide a shell window in Linux?
我正在使用 C 开发一个应用程序,它应该在 Windows 和 Linux 上运行。这个应用程序应该隐藏它运行的 shell。 在 Windows 上,我可以通过调用 ShowWindow function 来修复它,但在 Linux 上,我找不到实现相同效果的方法。
void main(void)
{
do_stuff();
#ifdef _WIN32
ShowWindow(GetConsoleWindow(), SW_HIDE);
#else
// Linux hide current console
#endif
while(1)
{
do_other_stuff();
}
}
在 linux 中,您调用的“控制台”(出于下文解释的原因,我将这个词用引号括起来)不是这样的控制台,而是另一个独立于主应用程序运行的应用程序,因此您通常无法完全控制它(因为应用程序不知道它是否从实际的系统控制台、 xterm(1)
应用程序、 gnome-terminal
应用程序等运行)
假设您从 ssh 连接到远程服务器启动您的应用程序, DISPLAY
环境变量指示 X11 服务器显示信息。 在这种情况下,生成您的应用程序的命令 shell 不是图形环境“控制台”,而是在 ssh session 上运行的本地 shell 从完全失控的远程连接启动。
关于术语“控制台”的注意事项:Windows 术语“控制台”引用了启动进程的公共 POSIX shell 接口,其中三个(在 windows 中,五个)打开文件描述符、标准输入、标准 output 和标准错误(在 MS 中-DOS 还有标准打印机和标准通信端口)描述符,默认情况下允许程序从其标准输入读取,并写入其标准 output 和标准错误。 术语控制台来自这样一个事实,即在 MS-DOS 中,(MS-DOS 通过进行类似于 UNIX 的系统调用来读取和写入描述符,对 CP/M 进行了改进)所有这些东西都发生在控制台上,所以他们选择了(这次在windows中)术语“a Windows console application”作为Windows普通应用程序通常不提供此接口。 为此,Windows 要求您的程序链接为“Windows 控制台”,这意味着链接一个特殊的库,该库打开 Windows window(在应用程序的控制下)并使所有输入、output 和标准错误到 go。 这使得 Windows 控制台应用程序能够控制控制台,因为它是一个应用程序 window,而不是 Linux,它可以,也可以不。
在 UNIX 系统中,术语控制台适用于一种特殊设备(与用于用户会话的设备具有相似的特性),其中 kernel 用于启动与管理员的通信(类似于---但不等于---标准输入, 标准 output 和内核的标准错误)一个特殊的设备,通常连接到打印机,显示有关设备错误的 kernel 消息或 kernel 安全消息。 UNIX 系统通常附有许多文本设备,只有一个被选为系统的控制台,但由于与 Windows 机器的这一差异,Microsoft 决定重新解释该术语以方便使用。 可能是一个错误但被接受的决定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.