Visual c++ 我可以从控制台应用程序读取退出值吗?
我想从控制台应用程序读取exit值,以便在退出之前退出该应用程序的所有相关线程 看一看。您需要使用的标准库是 你能做的就是注册信号,这些信号会迫使你的应用程序关闭(SIGTERM)并在那里执行逻辑,比如退出多个线程 您还可以注册一个函数,该函数似乎可以捕获main()等的正常退出,但不确定关闭终端是否会被视为“正常退出”。编辑:Ok,因此您似乎希望在进程退出后立即收到通知。对不起,由于“退出值”这个术语,我误读了你的问题。如果您通过Visual c++ 我可以从控制台应用程序读取退出值吗?,visual-c++,operating-system,windows-xp,Visual C++,Operating System,Windows Xp,我想从控制台应用程序读取exit值,以便在退出之前退出该应用程序的所有相关线程 看一看。您需要使用的标准库是 你能做的就是注册信号,这些信号会迫使你的应用程序关闭(SIGTERM)并在那里执行逻辑,比如退出多个线程 您还可以注册一个函数,该函数似乎可以捕获main()等的正常退出,但不确定关闭终端是否会被视为“正常退出”。编辑:Ok,因此您似乎希望在进程退出后立即收到通知。对不起,由于“退出值”这个术语,我误读了你的问题。如果您通过CreateProcess()API启动流程,您应该能够在句柄上
CreateProcess()
API启动流程,您应该能够在句柄上执行WaitForSingleObject()
。此函数将一直阻止,直到进程退出。因此,您可以在这个调用之后,在进程停止之后,放置您想要执行的所有代码,所有这些代码都应该是正常的
如果您确实需要进程的退出代码(main()
)中的返回X):
通过编程,您可以使用WinAPI中的GetExitCodeProcess()
:
在shell中,使用%errorlevel%
变量
这是我在Windows上的工作尝试一下吧
#包括
#包括
#包括
#包括
使用名称空间std;
名称空间
{
易失性sig_原子出口;
无效信号处理器(int sig)
{
信号(sig,信号处理器);
退出=1;
}
}
int main()
{
信号(SIGINT,信号处理器);
信号(SIGTERM,信号处理器);
#ifdef SIGBREAK
信号(信号断路器、信号处理器);
#恩迪夫
当(!退出)
{
/*做点什么*/
}
//这里有信号吗
}
你可以一直写日志文件。这是OS问题,不是C或C++问题。你能用你正在使用的任何操作系统来标记这个问题吗?你可以回顾这篇文章[如何处理ctrl-break信号][1][1]:我想捕捉退出信号,这样我就可以在退出之前关闭所有相关程序。@abdo.eng2006210 yes,为SIGTERM添加一个信号处理程序就可以了。@GeniusIDS lol你刚才复制粘贴了我链接到的帖子吗?@KarthikT lol没有,我只是用代码解释了我之前发布的链接[link]()
#include <csignal>
#include <iostream>
#include <ostream>
#include <string>
using namespace std;
namespace
{
volatile sig_atomic_t exit;
void signal_handler(int sig)
{
signal(sig, signal_handler);
exit= 1;
}
}
int main()
{
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
#ifdef SIGBREAK
signal(SIGBREAK, signal_handler);
#endif
while (!exit)
{
/* do something */
}
// Catch signal here
}