C++ zsh/sh/bash如何检查命令的信号信号;cat&&引用;从c++;程序
我无法理解终端如何知道在后台模式下是否使用了二进制文件C++ zsh/sh/bash如何检查命令的信号信号;cat&&引用;从c++;程序,c++,bash,signals,C++,Bash,Signals,我无法理解终端如何知道在后台模式下是否使用了二进制文件stdin 我有一个C++程序,它必须在后台运行代码,如代码>/bin /CAT//C>,但我没有得到错误信息: cat已停止,因为它使用了stdin并获得了SIGTTIN 原因是,此时,cat正在等待输入stdin,但您没有给它一个输入文件(通过,你必须确保在启动 CAT/COM>进程时调用它的代码> STDIN :给它一个文件,一个管道,或者将它连接到你自己的程序中的文件句柄。< /P> < P>也许你想用一个类似的东西: void si
stdin
我有一个C++程序,它必须在后台运行代码,如代码>/bin /CAT//C>,但我没有得到错误信息:
cat
已停止,因为它使用了stdin
并获得了SIGTTIN
原因是,此时,
cat
正在等待输入stdin
,但您没有给它一个输入文件(通过
或通过类似echo foo | cat&
的管道),而且它没有作为stdin
连接到您的终端,因为您将它放在后台,因此,当它试图从stdin
读取时,它就得到了信号sigtin
。由于交互终端在默认情况下启用了作业控制,因此终端会收到此通知,因此当后台作业在等待来自stdin
的输入时暂停时,会弹出消息
如果你试图在C++程序中打开
void signal_handler(int signal)
{
std::cout << "Received SIGTTIN signal\n";
}
int main()
{
std::signal(SIGTTIN, signal_handler);
...
}
void信号处理器(int信号)
{
std::cout所以。经过两天的尝试和哭泣,现在我解决了这个问题。如果你想给你的孩子进程sigtin,你应该调用setpgid()这个问题是用C++来标记的,它是如何与编程相关的?@ ThomasSablik刚刚删除它——必须首先检查一个编辑。问题是,在这个时候,<代码> CAT/COD>等待输入“代码> STDIN < /Cord>,但是您没有给它输入文件(通过<代码> < <代码> >或管道)并且它没有以stdin
的形式连接到您的终端,因此它在尝试从stdin
读取数据时,会立即收到信号SIGTTIN
。终端会收到此通知,因为交互终端默认启用作业控制,因此当它们在等待stdin
的输入时,后台作业会被暂停,这个消息突然出现了。@ PaulvAsAn我使用C++标签,因为在这个时候我尝试创建一个应用程序。这个应用程序必须在后台运行/BI/CAT。给我的标签回!固定这个问题,所以C++连接是清楚的。请参见我的编辑,以确保我没有偏离你的实际意思。我没有这个信息的问题。我只想知道它在C++代码中是如何工作的,只是在底部添加了一个关于C++的注释。不,你不理解我。如果我在应用程序中运行/bin/CAT,它正常工作。但是我不会像TealAlh那样处理一个错误。好的。我想我现在就可以了。很抱歉,你把问题搞定了。我很高兴你把它修好了。这是一个更深的问题。顺便说一下,我把你的C++标签放回原处,顺便说一下,这是一个C++信号问题,但不是一个BASH。现在我得到你的问题,你似乎需要C++中的Bash风格的作业控制,我不知道该怎么做。我希望其他人能帮助你。你可能想编辑你的问题,使它更直接。在这一点上,类似于“我想以类似BASH的方式监视C++中的子进程”。