qnx挂死恢复脚本简易写法
接触qnx两天,拿到手上的板子bsp软件已经被定制过,将启动脚本的位置和文件系统做了大量更改
如下是几个命令来处理退出和恢复过程
由于tinyRPC接口不提供退出接口,商务又不允许改接口,就采用低级的风险的退出方式exit(),远端服务端使用了ip,port转发等鬼东西,socket端口访问总是无法访问,于是用ping来查询远程机器是否启动来代替查询远程tinyRPC服务器是否运行,但exit退出方法会引起内存泄漏,从代码端检测到连接断开退出进程的写法
void t_resume()
{
// TSocketConnect::Inst()->SetIPAddr("192.168.1.5", 32769);
// std::cout << "[bgk] set ipaddr...192.168.1.5....<<<<<<<<<<<<<<<<<<<<<<<<<<<" << std::endl;
//
// while(1)
// {
// sleep(10);
// std::cout << "[bgk] sleep 10s, connect_sts = " << TSocketConnect::Inst()->SocketConnectStatus() << endl;
//
// if (!TSocketConnect::Inst()->SocketConnectStatus())
// {
// // TRPCClientMgr::Inst()->Exit();
// // break;
// }
// }
// // exit(1);FILE * fp;char buffer[20];char cmp[20];while(1){sleep(10);memset(buffer, 0, 20);memset(cmp, 0, 20);fp = popen("echo $(echo `ping -c 1 10.255.255.100`) | grep 'time=' ", "r");fgets(buffer, sizeof(buffer), fp);// std::cout << buffer << std::endl;pclose(fp);if(!memcmp(cmp, buffer, 20)){std::cout << "exit tinyrpc_service" << std::endl;exit(1);}}}
在启动脚本了做个检测,发现远程服务器连接上之后再发起tinyRPC客户端的连接,想用telnet来过滤,命令没有,ssh命令没有,好在加命令相对简单,但加上去之后发现telnet和socket一样无法访问远程端口,很多linux上稳定运行的工具都没法使用,最后只能采用极端的方法了,在qnx启动脚本里运行一个后台shell脚本来监控远程服务器,一旦起来就运行tinyRPC
#!/bin/sh# Import environment
basepath=$(cd `dirname $0`; pwd -P). $basepath/env_setup.shwhile true
dosleep 3result=$(echo `ps -e -o pid,comm | grep "tinyrpc_service" | grep -v PID | grep -v grep`)# echo $resultif [[ "$result" != "" ]]then# echo "tinyrpc runing"sleep 1elseresult=$(echo $(echo `ping -c 1 10.255.255.100`) | grep "time=")if [ "${result}" != "" ]thenecho "tinyrpc resume"tinyrpc_service &fifi
done
现有的指令得到两列结果(602151 vcapture-test)
如果想得到单独的pid号,可以在加awk指令过滤(602151)
echo `ps -e -o pid,comm | grep "vcapture-test" | grep -v PID | grep -v grep | awk '{print $1}'`
其他:
在qnx文件系统里加命令方法,在src\hardware\startup\boards\dra72x\evm\build目录下general commands段中加入需要的命令
telnet访问端口脚本如下,linux上很好用,但qnx用起来有点莫名其妙,感觉不是每次返回都是确定了
#!/bin/shnum=`echo -n "\n"|telnet 127.0.0.1 32769|grep Connected|wc -l`if [ $num -eq 1 ]; thenecho "network is open."
elseecho "network is closed."
fi
Socket端口在Linux上默认打开方式为非阻塞的,但在Qnx的默认打开方式为阻塞的,解决方法为设置非阻塞标志位
int sockfd;sockfd = socket(AF_INET, SOCK_STREAM, 0);flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
qnx挂死恢复脚本简易写法相关推荐
- linux 网卡自动挂死,shell脚本自动检测网络掉线和自动重连
在ppp移植成功后,有时会出现ppp掉线等情况.这篇文章写了一个自动检测连接网络的解决方法. 创建一个shell脚本,在里面添加一下内容.(记得给操作权限) #!/bin/sh //根据你自己的she ...
- Python脚本语言写法
Python脚本语言写法 脚本语言的开始行,是指文件中的代码用什么可执行程序去运行它,就这么简单. #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的pyth ...
- 一次挂死(hang)的处理过程及经验
前言: CPU占用率低,内存还有许多空余,但网站无法响应,这就是网站挂死,通常也叫做hang.这种情况对于我这样既是CEO,又是CTO,还兼职扫地洗碗的个人站长来说根本就是家常便饭.以下是一次处理ha ...
- i2c- sda挂死分析
I2C是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA).I2C是总线结构,1个Master,1个或多个Sla ...
- 记一次 .NET WPF布草管理系统 挂死分析
一:背景 1. 讲故事 这几天看的 dump 有点多,有点伤神伤脑,晚上做梦都是dump,今天早上头晕晕的到公司就听到背后同事抱怨他负责的WPF程序挂死了,然后测试的小姑娘也跟着抱怨...嗨,也不知道 ...
- redis 清空缓存_「镜头回放」简直了!spring中清除redis缓存导致应用挂死
异常场景 springWeb应用一直运行正常,同事最近反应,每次版本更新完毕,刷新缓存,就会导致应用挂死.只有重启redis应用才恢复正常. 项目概况 springWeb项目,常用配置表做了redis ...
- MySQL 连接挂死了!该如何排查?
开发者(KaiFaX) 面向全栈工程师的开发者 专注于前端.Java/Python/Go/PHP的技术社区 一.背景 近期由测试反馈的问题有点多,其中关于系统可靠性测试提出的问题令人感到头疼,一来这类 ...
- MySQL 连接为什么挂死了?
[摘要] 本次分享的是一次关于 MySQL 高可用问题的定位过程,其中曲折颇多但问题本身却比较有些代表性,遂将其记录以供参考. 一.背景 近期由测试反馈的问题有点多,其中关于系统可靠性测试提出的问题令 ...
- VxWorks任务挂死实战分析
目录 背景描述 根本原因 分析过程 背景描述 操作系统:VxWorks 5.5 CPU:MIPS32 74Kc内核CPU 现象描述:联调代码时发现应用层代码调用以下接口函数必现任务挂死,检查代码发现入 ...
最新文章
- Django Python:完整的BUNDLE + Django真实项目2021
- 河南信息工程学校计算机协会申请书,协会成立申请书范文15篇.docx
- 机器人学一些概念1——自由度冗余,映射和操作算子
- ssm打印sql如何开启_mybatis怎么配置log4j打印出sql语句
- 战略分析思路——商业模式及沙盘推演
- 又是一年国庆假期最后一天
- c语言怎样用格式化文件存储,如何用格式化的方式读写文件
- 美来临公司商业模式分析,公司是不昨的
- android获取手机联系人信息(电话,邮箱,姓名,头像)
- 机械键盘POKER2的硬编程
- xshell上传文件插件lrzsz
- WIN10安装cad2006提示无权限安装的解决办法
- 第1章思维导图图片版
- CSDN博客创建目录的方法
- 【TypeScript】TS与Vue
- 10 令牌颁发 OAuth2TokenEndpointFilter
- 四、完成Teigha.net库对CAD看图的放大/缩小/移动实体等界面操作,图层管理器,以及CAD文件布局的切换功能
- DT内核圆柱模板行业站点主动tags三项主动推送插件
- scilab 求微分_SCILAB第六章微积分应用.PDF
- MySQL Win7 64位 下载、安装与配置图文教程