我正在开发一个shell脚本,并希望处理我可能遇到的各种退出代码.为了尝试,我使用这个脚本:
#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 1
exit 1;
Run Code Online (Sandbox Code Playgroud)
我想我错过了一些东西,但似乎我无法陷入自己的"退出1".如果我试图陷阱0一切正常:
#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 0
exit
Run Code Online (Sandbox Code Playgroud)
关于捕获HUP(1)退出代码有什么我应该知道的吗?
好的,我正在编写一个程序正在进行一些非常繁重的分析,我希望能够快速停止它.
我添加signal(SIGINT, terminate);
到main的开头并定义了终止,如:
void terminate(int param){
cout << endl << endl << "Exit [N]ow, or [A]fter this url?" << endl;
std::string answer;
cin >> answer;
if(answer[0] == 'n' || answer[0] == 'N'){
terminateParser();
exit(1);
}else if(answer[0] == 'a' || answer[0] == 'A'){
quitAfterUrl = true;
}
}
Run Code Online (Sandbox Code Playgroud)
在linux中,这正如我所期望的那样,即它等待用户输入.但是,当我尝试在Windows中执行相同操作时,它会显示消息并退出.
有没有办法阻止SIGINT立即关闭程序?
更新:
当我试着
BOOL WINAPI handler(DWORD dwCtrlType)
{
if (CTRL_C_EVENT == dwCtrlType)
{
// ask the user
}
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
正如Gregory建议的那样,该程序仍然毫不客气地退出而没有停止用户输入.
更新2:我不确定它做了什么,但代码现在正在运行.谢谢大家的帮助.
我有一个从JSON查询字符串返回的NULL对象,我不知道如何在If语句中检查它.我的语法如下,但我似乎仍然无法为NULL
类捕获(即,如果没有返回任何内容,那么就不能设置文本变量,因此它必须是一个NULL
类?),无论如何,我需要检查一下@"BillingStreet"
在它的东西,如果不避免处理它(否则应用程序崩溃,因为它试图没什么设置的一个文本值fields
中VC
):
- (void) tableView: (UITableView *)itemTableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath{
NSDictionary *obj = [self.dataCustomerDetailRows objectAtIndex:indexPath.row];
NSString *text = [obj objectForKey:@"BillingStreet"] == nil ? @"0" : [obj objectForKey:@"BillingStreet"];
NSLog(@"%@",text);
if (text.class == NULL){
} else {
NSLog(@"no street");
self.labelCustomerAddress.text = [obj objectForKey:@"BillingStreet"];
}
}
Run Code Online (Sandbox Code Playgroud) 我不是专家,只是一个业余爱好者.我过去常常使用68000架构,而且我一直在考虑它的TRAP指令.该指令总是被描述为操作系统的"桥梁"(在某些系统中,它并没有在这方面使用,但这是一个不同的故事).如何实现这一目标?TRAP本身是一个特权指令,那么这个OS调用机制如何在用户模式下工作?我的猜测是触发了特权违规异常,异常处理程序检查特定指令导致了异常.如果它是TRAP指令,那么简单地执行指令(也许TRAP的操作数,即TRAP向量号也被检查),当然现在处于管理员模式.我对吗?
我写了下面的脚本:
#!/bin/bash
sleep 15
function_signalr()
{
date
date | awk '{printf "%-15s\n", $2}'
}
trap "function_signalr" 10
Run Code Online (Sandbox Code Playgroud)
当我通过“进程&”启动进程时,将给出PID。我确实杀死了-10 PID,但是我的陷阱不起作用。该进程被杀死,但陷阱没有弹出。没有给出日期消息。如有任何建议,我将不胜感激。
我已经开发了自己的SNMP服务,我想绘制一个提供的OID图.所以,我在Cacti创建了一个图表. - )显示设备. - )它正在创建rrd文件.(RRDTool说好的). - )显示图表,但它是空的.
但是当我检查它时,说
rrdtool fetch <rrd file> AVERAGE
Run Code Online (Sandbox Code Playgroud)
它告诉我nan
所有的价值观.被监视的OID的值为47,我设置了min = 0和max = 100.
我正在使用rpath的Cacti设备:
http://www.rpath.org/ui/#/appliances?id=http://www.rpath.org/api/products/cacti-appliance
不过,我无法在图表上显示价值..
问题出在哪儿?有人可以告诉我吗?
可以使下面的bash脚本像我在标题中所说的那样工作吗?
#!/bin/bash
echo_report() {
echo "echo on line $1"
}
trap 'echo_report $LINENO' [sigspec]
#same code here
echo "hi"
#more code here
Run Code Online (Sandbox Code Playgroud)
我不知道应该用什么[sigspec]
......
如果trap
无法使用,我还有其他选择吗?
使用trap
可能有助于编写最干净的bash脚本.但是我想知道是否存在解决方案以便在以下情况下捕获错误:
GNU bash,版本4.2.45
好的
#!/bin/bash
trap 'echo OK i see error at line $LINENO;exit' ERR
unknowncommand
echo "test KO should never reach me"
Run Code Online (Sandbox Code Playgroud)
案例KO
#!/bin/bash
trap 'echo OK i see error at line $LINENO;exit' ERR
unknowncommand && echo "miss the trap"
echo "test KO should never reach me"
Run Code Online (Sandbox Code Playgroud)
&&
使整个句子不是ERR.我正在构建SNMP代理,现在正在处理陷阱消息。在开始编写陷阱消息的代码之前,我有一个问题:
在SNMPv1中,具体的陷阱代码是什么?我到处搜索的内容都只是表面上的定义,而我想获得一个深层的定义,其中包含它的可能。
什么是perl中最简单的代码来监控任何设备(例如UPS,整流器,AirCond等)的陷阱.例如我们要监控温度,服务器室湿度,空气水平等.每个设备如UPS,里面都有SNMP卡和然后我们推出了陷阱服务器的IP地址.目前我正在使用snmptt开放软件应用程序.