2010-03-12 71 views
4

我正在尝试使用Java的Runtime.exec()来执行Perl解释器的副本。但是,它返回了错误代码9。几次运行该文件后,perl解释器神秘地开始返回代码253,而我的命令完全没有变化。perl解释器的状态码是什么意思?

代码253 /代码9是什么意思?谷歌搜索perl口译员的退出代码没有任何结果。我在哪里可以找到Perl解释器的退出代码列表?

+1

perl二进制给出了一个返回值,但它是二进制还是应用程序?也就是说,我可以用'exit(253)'写一个perl程序,它将成为进程的返回值。 – msw 2010-03-12 12:28:07

+2

接近255的退出值通常是由于shell或其他包装。你的shell是否告诉你类似“无法找到perl”或“资源不足,无法分叉”? – hobbs 2010-03-12 12:44:12

+0

所以结果代码253是由于程序没有找到文件路径。感谢所有的帮助。 – futureelite7 2010-03-12 18:03:55

回答

7

perldoc perlrun

If the program is syntactically correct, it is executed. If the program runs off the end without hitting an exit() or die() operator, an implicit exit(0) is provided to indicate successful completion.

因此,正在运行的程序必须以某种方式通过dieexit或同等指定的出口值。

4

在正常情况下,perl将返回它运行的程序返回的任何内容。因此,如果不知道正在运行的程序,就不能概括返回值的含义。

4

Perl本身没有任何定义的退出代码;除非perl解释器以非常可怕的方式崩溃,否则退出代码由perl正在运行的程序确定,而不是由perl本身确定。

+0

我读过我必须将返回值右移8位才能获取脚本的返回值?不要他们并排输出返回值,每个占用一个字节? – futureelite7 2010-03-12 13:38:07

1

由于错误代码在一些运行后发生了变化;如果您正在运行一个Java应用程序作为连续运行的Web应用程序,请检查它是否可能是某种内存泄漏。

您可以通过使用Perl解释器的-Tw选项运行它测试你的各种问题perl脚本,使受污染的模式和警告,请参阅perlrun有关这些详细信息。

+0

你能解释为什么污点会帮助解决这个问题吗? – justintime 2010-03-13 11:09:28

3

perl解释器实际上确实如果脚本没有运行,返回它自己的退出代码。大部分的语法错误导致退出代码9:

未知函数/不允许裸字:

perl -e 'use strict; print scalar(localtime); schei;' 

$? = 9

除以零:

perl -e 'use strict; print scalar(localtime); my $s = 1/0;' 

$? = 9

语法错误:

perl -e 'use strict; print scalar(localtime); my $ff; $ff(5;' 

$? = 9

使用模具:

perl -e 'use strict; print scalar(localtime); die "twaeng!"' 

$? = 9

未知模块是唯一一个情况下,我发现perl的退出是不同的:

perl -e 'use strict; use doof; print scalar(localtime);' 

$?= 2

顺便说一句我仍然在寻找perl解释器退出代码的完整列表。除了perl解释器的源代码,任何人都有想法去看看?

+0

['die'](http://perldoc.perl.org/functions/die.html)的perldoc有一些关于退出代码的信息,但建议您不要依赖退出代码,零 – Hasturkun 2010-11-06 01:44:34

+0

我认为这是最全面的答案。谢谢你,@伍德 – 2016-08-01 13:10:12