首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Linux中隐藏shell窗口?

如何在Linux中隐藏shell窗口?
EN

Stack Overflow用户
提问于 2022-11-07 17:10:53
回答 1查看 53关注 0票数 0

我正在使用C开发一个应该在Windows和Linux上运行的应用程序。这个应用程序应该隐藏运行它的shell。在Windows上,我能够通过调用ShowWindow函数来修复它,但在Linux上,我找不到实现相同效果的方法。

代码语言:javascript
复制
void main(void)
{
  do_stuff();

  #ifdef _WIN32
    ShowWindow(GetConsoleWindow(), SW_HIDE);
  #else
   // Linux hide current console
  #endif

  while(1)
  {
    do_other_stuff();
  }
}
EN

回答 1

Stack Overflow用户

发布于 2022-11-16 06:51:51

在linux中,“控制台”(我在下面解释的单词前后加引号)不是这样的控制台,而是另一个独立运行主应用程序的应用程序,因此您通常无法完全控制它(因为应用程序不知道它是从实际的系统控制台、从xterm(1)应用程序、gnome-terminal应用程序等运行的)。

假设您从ssh连接到远程服务器启动应用程序,DISPLAY环境变量指示X11服务器显示信息。在这种情况下,生成应用程序的命令shell不是图形环境“控制台”,而是运行在ssh会话上的本地shell,它是从完全失控的远程连接启动的。

关于“控制台”一词的注释: windows "console“引用常见的POSIX接口,该接口使用三个打开文件描述符(在Windows中为5个)、标准输入、标准输出和标准错误(在MS中也是标准打印机和标准通信端口)描述符启动进程,默认情况下允许程序从其标准输入中读取,并写入其标准输出和标准错误。控制台一词来源于这样一个事实:在MS-DOS中,( Windows通过向UNIX发出类似的系统调用来读写描述符)对CP/M进行了改进)所有这些东西都发生在控制台上,所以他们选择(在Windows中)术语“Windows控制台应用程序”作为Windows正常应用程序通常不提供这个接口。为此,Windows要求将程序链接为"Windows控制台“--这意味着链接一个特殊库,该库打开Windows窗口(受应用程序控制),并使所有输入、输出和标准错误都进入该库。这使得Windows控制台应用程序能够控制控制台,因为它是一个应用程序窗口,而不是Linux的情况。

在UNIX系统中,控制台一词适用于一种特殊设备(其特性类似于用户会话所用的设备),其中内核用于启动与管理员的通信(类似--但不等于--内核的标准输入、标准输出和标准错误)--一种通常附在打印机上的特殊设备,用于显示关于设备错误或内核安全消息的内核消息。UNIX系统通常有许多文本设备,并且只有一个被选择作为系统的控制台,但是由于与Windows机器的不同,Microsoft决定重新解释这个术语,以方便他们。可能是个错误但被接受的决定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74350355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档