繁体   English   中英

如何在 Linux 中隐藏一个 shell window?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM