如何通过Qprocess运行ping命令,确保主机可访问时退出代码始终为2?

2026-04-16 17:4916阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计580个文字,预计阅读时间需要3分钟。

如何通过Qprocess运行ping命令,确保主机可访问时退出代码始终为2?

我在使用QProcess执行ping命令以检查主机是否在线。问题是,无论ping是否可达主机,还是无法访问的主机,我从QProcess完成中接收到的退出代码总是2。我一直在QTimer中ping一个主机(我在Qt应用中)。

我正在使用Qprocess执行ping以检查主机是否在线…

问题是,无论是ping可达主机还是无法访问的主机,我从Qprocess->完成信号中接收的退出代码总是2.

我一直在QTimer中ping一个主机(我在Qt应用程序运行的客户端安装了一个文件夹)…

当我在连接到QProcess->完成信号的插槽中捕获ping返回的退出代码时,我总是收到退出代码为2 ..

我不能通过系统(ping)使用直接系统调用,因为它挂起我的应用程序ping时间是活动的…
我希望它是异步的,所以我切换到QProcess …

以下是代码段:

//Pinging function called inside a timer with timout 1000 QString exec="ping"; QStringList params; if(!dBool) { //params << "-c1 1.1.1.11 -i1 -w1;echo $?"; params <<" 1.1.1.11 -i 1 -w 1 -c 1";//wont ping cout<<"\n\npinging 11 ie wont ping"; } else { //params << "-c1 1.1.1.1 -i1 -w1;echo $?"; params <<" 1.1.1.1 -i 1 -w 1 -c 1";//will ping cout<<"\n\npinging 1 ie will ping"; } ping->start(exec,params); // the slot that connects with QProcess->finished signal void QgisApp::pingFinished( int exitCode, QProcess::ExitStatus exitStatus ) { cout<<"\n\nexitCode,exitStatus=="<<exitCode<<","<<exitStatus;//always 2,0!! if(exitCode==0) //if(dBool) { connectivity=true; cout<<"\n\nONLINE"; } else { connectivity=false; cout<<"\n\nOFFLINE"; } }

cout<<"\n\nexitCode,exitStatus=="<<exitCode<<","<<exitStatus

无论1.1.1.1是否被ping或1.1.1.11是否被ping,所以line总是给出2,0作为输出
在终端1.1.1.1上是pingable而1.1.1.11不是(我通过在keypress事件上设置的dBool标志切换bw ips以模拟在线/离线主机,以便我的应用程序可以相应地运行)

任何输入都将是一个很大的帮助..

谢谢.

我认为依赖ping.exe退出代码是一种不好的做法,因为它没有文档记录.此外,众所周知,在不同版本的Windows中,退出代码是不一致的.

你可以:

>实施自己的ping.有很多免费的实现,比如this(在google中搜索“ping.c”时第一个).
>解析ping.exe输出并确定ping是否成功.

编辑:

如何通过Qprocess运行ping命令,确保主机可访问时退出代码始终为2?

没有意识到你正在使用Linux(下次在你的问题中提及它可能更明智)…

将参数发送到ping时尝试此操作:

params << "1.1.1.11" << "-i" << "1" << "-w" << "1" <<"-c" <<"1";

而不是一个大字符串.

本文共计580个文字,预计阅读时间需要3分钟。

如何通过Qprocess运行ping命令,确保主机可访问时退出代码始终为2?

我在使用QProcess执行ping命令以检查主机是否在线。问题是,无论ping是否可达主机,还是无法访问的主机,我从QProcess完成中接收到的退出代码总是2。我一直在QTimer中ping一个主机(我在Qt应用中)。

我正在使用Qprocess执行ping以检查主机是否在线…

问题是,无论是ping可达主机还是无法访问的主机,我从Qprocess->完成信号中接收的退出代码总是2.

我一直在QTimer中ping一个主机(我在Qt应用程序运行的客户端安装了一个文件夹)…

当我在连接到QProcess->完成信号的插槽中捕获ping返回的退出代码时,我总是收到退出代码为2 ..

我不能通过系统(ping)使用直接系统调用,因为它挂起我的应用程序ping时间是活动的…
我希望它是异步的,所以我切换到QProcess …

以下是代码段:

//Pinging function called inside a timer with timout 1000 QString exec="ping"; QStringList params; if(!dBool) { //params << "-c1 1.1.1.11 -i1 -w1;echo $?"; params <<" 1.1.1.11 -i 1 -w 1 -c 1";//wont ping cout<<"\n\npinging 11 ie wont ping"; } else { //params << "-c1 1.1.1.1 -i1 -w1;echo $?"; params <<" 1.1.1.1 -i 1 -w 1 -c 1";//will ping cout<<"\n\npinging 1 ie will ping"; } ping->start(exec,params); // the slot that connects with QProcess->finished signal void QgisApp::pingFinished( int exitCode, QProcess::ExitStatus exitStatus ) { cout<<"\n\nexitCode,exitStatus=="<<exitCode<<","<<exitStatus;//always 2,0!! if(exitCode==0) //if(dBool) { connectivity=true; cout<<"\n\nONLINE"; } else { connectivity=false; cout<<"\n\nOFFLINE"; } }

cout<<"\n\nexitCode,exitStatus=="<<exitCode<<","<<exitStatus

无论1.1.1.1是否被ping或1.1.1.11是否被ping,所以line总是给出2,0作为输出
在终端1.1.1.1上是pingable而1.1.1.11不是(我通过在keypress事件上设置的dBool标志切换bw ips以模拟在线/离线主机,以便我的应用程序可以相应地运行)

任何输入都将是一个很大的帮助..

谢谢.

我认为依赖ping.exe退出代码是一种不好的做法,因为它没有文档记录.此外,众所周知,在不同版本的Windows中,退出代码是不一致的.

你可以:

>实施自己的ping.有很多免费的实现,比如this(在google中搜索“ping.c”时第一个).
>解析ping.exe输出并确定ping是否成功.

编辑:

如何通过Qprocess运行ping命令,确保主机可访问时退出代码始终为2?

没有意识到你正在使用Linux(下次在你的问题中提及它可能更明智)…

将参数发送到ping时尝试此操作:

params << "1.1.1.11" << "-i" << "1" << "-w" << "1" <<"-c" <<"1";

而不是一个大字符串.