无法通过c中的system()连接到已经激活的屏幕

问题描述 投票:3回答:2

这是我编写的代码的一部分,用于填充0在我的一个Ubuntu终端选项卡中打开的屏幕会话。

char command[60];
strcpy( command, "screen -S 8305.pts-1.MYUb  -X stuff $'0'" );
system(command);

它编译得很好,只有一个警告

ignoring return value of ‘system’,

但是当涉及到运行时,我得到如下信息:

No screen session found.

我已尝试使用其他shell命令的system(),它工作得非常好。当您在终端会话中而不是在c代码中运行它时,屏幕命令也可以正常工作。

c bash shell gnu-screen
2个回答
2
投票

最有可能的是,您以与拥有该屏幕的用户不同的用户身份运行该命令。例如,将二进制文件作为sudo运行。

您可以运行ps aux来查找运行二进制文件的用户。

要使系统命令工作,您应该以拥有该屏幕的用户身份运行它。


1
投票

我认为问题是你正在使用-S创建一个新的命名屏幕,而-X则向已经运行的屏幕会话提交命令。

你要么:

system( "screen -S 8305.pts-1.MYUb cmd" );

要么

system( "screen -r 8305.pts-1.MYUb -X cmd" );

仅供参考 - 我不确定stuff $0应该是什么,并且在您提供的代码的上下文中不起作用 - 但我相信与您报告的问题不同的问题。

来自man(1)页面

-S sessionname 创建新会话时,此选项可用于为会话指定有意义的名称。

-X将指定的命令发送到正在运行的屏幕会话。

© www.soinside.com 2019 - 2024. All rights reserved.