当前位置: 技术问答>linux和unix
急,求各位帮忙 为什么c可执行文件被kill 后,status 为113
来源: 互联网 发布时间:2016-04-11
本文导语: 最近在做一个unix移行的项目。遇到一个难题,求各位大侠帮忙。 可执行文件mq501为c语言程序。按照以下的方式执行。 移行前环境:OSF1 mq501执行后,进程ID 为 12011 然后,用unix的kill 命令来杀死进程。 命令如下, ...
最近在做一个unix移行的项目。遇到一个难题,求各位大侠帮忙。
可执行文件mq501为c语言程序。按照以下的方式执行。
移行前环境:OSF1
mq501执行后,进程ID 为 12011
然后,用unix的kill 命令来杀死进程。
命令如下,
kill 12011
这时跟踪进程12011的执行状态值status为 0.
正常终了。
但是,再移行后环境上有问题。
移行后环境:hp-unix
mq501执行后,进程ID 为 12012
然后,用unix的kill 命令来杀死进程。
命令如下,
kill 12012
这时跟踪进程12012的执行状态值status为 -113,而用
ps命令检测时,进程12012也的确不存在了。
具体的显示信息是。
[1] 中断 -113 mq501
但status为什么不是0呢???
因为release后,要用JP one来执行,当status不是0而在一次执行mq501时,JPONE
启动mq501失败,返回143的错误。
现在想知道
①status为什么不是0呢?
②怎样处理才能让它为0呢?
mq501.pc的大致流程如下。
#include
#include
EXEC SQL INCLUDE SQLCA;
函数宣言
int mq_signal();
int main(
int argc,
char** argv
)
{
/*signal 捕捉函数 */
signal(SIGTERM,mq_signal);
/jvm 启动/
/ * 业务处理。 */
}
mq_signal.pc的流程如下。
int mq_signal()
{
/* */
JVM释放
/* 返回0*/
exit (0);
}
mq_signal就是释放已经载入的JVM。别的没啥。
可执行文件mq501为c语言程序。按照以下的方式执行。
移行前环境:OSF1
mq501执行后,进程ID 为 12011
然后,用unix的kill 命令来杀死进程。
命令如下,
kill 12011
这时跟踪进程12011的执行状态值status为 0.
正常终了。
但是,再移行后环境上有问题。
移行后环境:hp-unix
mq501执行后,进程ID 为 12012
然后,用unix的kill 命令来杀死进程。
命令如下,
kill 12012
这时跟踪进程12012的执行状态值status为 -113,而用
ps命令检测时,进程12012也的确不存在了。
具体的显示信息是。
[1] 中断 -113 mq501
但status为什么不是0呢???
因为release后,要用JP one来执行,当status不是0而在一次执行mq501时,JPONE
启动mq501失败,返回143的错误。
现在想知道
①status为什么不是0呢?
②怎样处理才能让它为0呢?
mq501.pc的大致流程如下。
#include
#include
EXEC SQL INCLUDE SQLCA;
函数宣言
int mq_signal();
int main(
int argc,
char** argv
)
{
/*signal 捕捉函数 */
signal(SIGTERM,mq_signal);
/jvm 启动/
/ * 业务处理。 */
}
mq_signal.pc的流程如下。
int mq_signal()
{
/* */
JVM释放
/* 返回0*/
exit (0);
}
mq_signal就是释放已经载入的JVM。别的没啥。
|
程序如果是SIGTERM信号结束的,好像返回值是143?
可能其它信号导致的返回值也不一样? 你可以man 2 wait 看看! 里面应该有对status的一些描述,也许有些帮助.
我想shell也应该wait or waitpid之类的函数来取得它们子进程的返回值的.
GOOD LUCK!
可能其它信号导致的返回值也不一样? 你可以man 2 wait 看看! 里面应该有对status的一些描述,也许有些帮助.
我想shell也应该wait or waitpid之类的函数来取得它们子进程的返回值的.
GOOD LUCK!
|
在一个进程退出时,其父进程接收到的它的退出状态的值有两部分组成,
最低的一个字节的值是其exit使用的的值,其它位是其接收到的信号值。
所以,当使用exit退出时,超过255的值会被截取。如果父进程要从子进程的退出状态值来取得其使用exit时的值,那就要用status&0xff来取得最低一位的值了。
最低的一个字节的值是其exit使用的的值,其它位是其接收到的信号值。
所以,当使用exit退出时,超过255的值会被截取。如果父进程要从子进程的退出状态值来取得其使用exit时的值,那就要用status&0xff来取得最低一位的值了。
|
建议你在一个终端(shell)运行mq501,然后在另一个终端kill该程序,然后回到第一终端用echo $?查看mq501程序的退出状态是什么?
-113是程序退出状态麼?? 应该不是吧,用echo $? 确认下吧
-113是程序退出状态麼?? 应该不是吧,用echo $? 确认下吧