我正在为大学做练习,我必须在退出时返回一个值,这个值实际上是一些东西.这可能高于255(exit()无法处理)但是老师建议使用测试数据,其中计数永远不会高于该值.
毕竟,我需要处理这个计数值,退出状态,我通过使用waitpid()在主进程中得到了这个值.令我惊讶的是,如果子进程返回1,则主进程中的"实际"值为256,2为512,依此类推......
我需要打印这个值,所以我简单地将它除以256并完成了.但是,如果我使用WEXITSTATUS()宏,我也会按照我想要的方式得到这个值...
我查看了C源代码,这是我发现的:
#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
Run Code Online (Sandbox Code Playgroud)
我理解这里发生了什么,例如,二进制512是10 0000 0000,右移8'将得到00 0000 0010,即十进制2.在这个宏中我不明白的是&运算符和0xff00似乎是一个随机数的事实(它可能不是,它来自哪里?).这究竟是做什么的,为什么宏中有"&0xff00"?它不会有效吗?
在这个主题中真正的问题是,在我的代码中将此宏称为除以256是一回事吗?
我正在Linux上使用代码来system()调用运行python程序.我对这个函数调用返回的值感兴趣,以了解python程序执行的方式.
到目前为止,我找到了3个结果:
当python进程成功完成时,system()返回的值为0
当python进程在执行中(使用kill -9 pid)被终止时,system()返回的值为9
当python进程因参数不正确而自行失败时,system()返回的值为512
这与我读过的关于system()函数的内容不符.
此外,被调用的python程序的代码显示它sys.exit(2)在遇到任何错误时以及sys.exit(0)执行成功完成时退出.
谁能说这两个人?我是以错误的方式解释返回值吗?是否涉及一些Linux处理,它接受sys.exit()python程序函数的参数并返回system()基于它的值?