gpt4 book ai didi

c++ - 调用外部脚本时的奇怪行为

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:11 27 4
gpt4 key购买 nike

我的 C++ 程序只是一个非常简单的 while 循环,我在其中使用 getline() 阻塞函数从控制台(标准输入,stdin)获取用户命令。有时我必须为其他目的调用外部 bash 脚本。该脚本与用户所做的事情没有直接关系,它只是在文件系统上做一些事情,但它必须在控制台标准输出 (stdout) 中打印文本行以通知用户其计算结果。

我得到的是,一旦脚本启动并将内容打印到标准输出,getline() 函数的行为就是非阻塞的(它应该阻塞直到用户输入一些文本)。结果,while(1) 开始全速旋转,CPU 使用率飙升至接近 100%。

我将问题缩小到单个 C++ 源文件,它以完全相同的方式重现了这个问题,这里是:

#include<iostream>
#include<string>
#include<sstream>
#include<iostream>
#include<stdlib.h>
#include<stdio.h>

int main(void)
{

int pid = fork(); // spawn

if(pid > 0)
{
// child thread
system("sleep 5; echo \"you're screwed up!!!\"");
}
else
{
// main thread
std::string input;
while(1)
{
std::cout << std::endl << "command:";
getline(std::cin, input);
}
}
}

在这种特殊情况下,5 秒后程序开始在 stdout 上发送垃圾邮件“\ncommand:”,停止它的唯一方法是发送 SIGKILL 信号。有时您必须在程序开始发送垃圾文本行之前按下键盘上的某些键。

让这段代码运行 10 秒钟,然后按键盘上的任意键。确保准备好从另一个控制台向进程发送 SIGKILL 信号。您可以使用命令 killall -9 progname

最佳答案

您是否检查过是否设置了 failbit 或 eof?

关于c++ - 调用外部脚本时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26034818/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com