在 Linux 上从桌面启动的程序的默认标准输入和标准输出是啥?
Posted
技术标签:
【中文标题】在 Linux 上从桌面启动的程序的默认标准输入和标准输出是啥?【英文标题】:What are the default stdin and stdout for a program started from desktop on Linux?在 Linux 上从桌面启动的程序的默认标准输入和标准输出是什么? 【发布时间】:2017-03-12 15:17:53 【问题描述】:当我从桌面(Ubuntu 16.04)而不是从 shell 启动程序以使程序不与终端关联时,该程序的标准输入和标准输出是什么?程序启动时STDIN_FILENO
和STDOUT_FILENO
是有效的文件描述符吗?在这种情况下printf
写到哪里?
【问题讨论】:
为什么不试试呢?在 Windows 中,如果使用stdout
,它将打开一个控制台窗口,该窗口在退出时关闭。除非在程序结束时有提示或暂停,否则它会发生得如此之快,以至于在屏幕刷新之前您甚至都看不到窗口。
@WeatherVane 我尝试在 Ubuntu 上使用 gcc 在 C 中编译 Hello World 程序。然后我双击桌面上的可执行文件,没有任何反应(没有弹出终端)。当我以这种方式启动该程序时,我仍然无法找出如何为该程序设置标准输入和标准输出。
您是否按照我的建议在程序结束时暂停?
这取决于你的桌面环境,但我猜标准描述符被重定向到/dev/null
。您可以ls -l /proc/$pidOfYourProgram/fd
查看。
它可能是一个unix域套接字。可能有一些守护进程从这个套接字读取并将内容转储到某种日志文件。
【参考方案1】:
您可以使用strace
程序查看程序正在执行的所有系统调用(如打开、读取、写入、关闭)。当您将它附加到“桌面程序”(运行您的程序的程序;使用pstree
或proctree
)时,您可以看到文件描述符 0、1 和 2 会发生什么。
见https://superuser.com/questions/606985/any-way-to-view-stdout-of-a-program-after-it-has-been-started-in-gnome-shell
或谷歌“gnome 运行程序标准输出”
【讨论】:
以上是关于在 Linux 上从桌面启动的程序的默认标准输入和标准输出是啥?的主要内容,如果未能解决你的问题,请参考以下文章
QProcess -> 在 Linux 上从 sftp 读取标准输出