无法通过 c 中的 system() 连接到已激活的屏幕
Can not connect to an already active screen through system() in c
这是我编写的部分代码,用于将 0 填充到在我的 Ubuntu 终端选项卡之一中打开的屏幕会话中。
char command[60];
strcpy( command, "screen -S 8305.pts-1.MYUb -X stuff $'0'" );
system(command);
它编译正常,只有像
这样的警告
ignoring return value of ‘system’,
但是当涉及到 运行ning 时,我收到如下所示的消息:
No screen session found.
我已经尝试将 system() 与其他 shell 命令一起使用,效果非常好。当您 运行 在终端会话中而不是在 c 代码中时,屏幕命令也可以正常工作。
我认为问题在于您正在使用 -S
创建一个新的命名屏幕,以及 -X
向已经 运行 的屏幕会话提交命令。
你要么想要:
system( "screen -S 8305.pts-1.MYUb cmd" );
或
system( "screen -r 8305.pts-1.MYUb -X cmd" );
仅供参考——我不确定 stuff [=14=]
应该是什么,并且在你提供的代码的上下文中是行不通的——但我相信这是一个不同的问题你举报了。
来自 man(1)
页
-S sessionname
When creating a new session, this option can be used to specify a meaningful name for the session.
和
-X Send the specified command to a running screen session.
很可能您运行以不同于拥有屏幕的用户的身份执行命令。例如 运行将二进制文件设置为 sudo。
您可以 运行 ps aux
找到您的二进制文件所在的用户 运行ning as。
要使系统命令起作用,您应该 运行 作为拥有屏幕的用户。
这是我编写的部分代码,用于将 0 填充到在我的 Ubuntu 终端选项卡之一中打开的屏幕会话中。
char command[60];
strcpy( command, "screen -S 8305.pts-1.MYUb -X stuff $'0'" );
system(command);
它编译正常,只有像
这样的警告ignoring return value of ‘system’,
但是当涉及到 运行ning 时,我收到如下所示的消息:
No screen session found.
我已经尝试将 system() 与其他 shell 命令一起使用,效果非常好。当您 运行 在终端会话中而不是在 c 代码中时,屏幕命令也可以正常工作。
我认为问题在于您正在使用 -S
创建一个新的命名屏幕,以及 -X
向已经 运行 的屏幕会话提交命令。
你要么想要:
system( "screen -S 8305.pts-1.MYUb cmd" );
或
system( "screen -r 8305.pts-1.MYUb -X cmd" );
仅供参考——我不确定 stuff [=14=]
应该是什么,并且在你提供的代码的上下文中是行不通的——但我相信这是一个不同的问题你举报了。
来自 man(1)
页
-S sessionname
When creating a new session, this option can be used to specify a meaningful name for the session.
和
-X Send the specified command to a running screen session.
很可能您运行以不同于拥有屏幕的用户的身份执行命令。例如 运行将二进制文件设置为 sudo。
您可以 运行 ps aux
找到您的二进制文件所在的用户 运行ning as。
要使系统命令起作用,您应该 运行 作为拥有屏幕的用户。