为什么本机程序在直接执行时运行正常,但在通过condor提交时失败并出现seg错误

时间:2011-04-18 15:59:24

标签: native libc sigsegv strncpy condor

我有一个第三方库,我试图将其纳入模拟。我们有静态库(.a),以及它的所有运行时依赖项(共享对象)。我创建了一个非常简单的应用程序(在C中),它与库相关联。它所做的就是调用初始化函数,该函数是第三方库API的一部分,然后退出。当我直接从命令行运行它时,它工作正常。如果我将可执行文件提交给我们的Condor网格,它会在strncpy(libc.so.6)上出现seg错误。我强迫condor只在特定的机器上运行可执行文件,如果我直接在该机器上运行它,它可以正常工作。

我主要是Java程序员......有限的本机编码经验。我熟悉nm,ldd,catchsegv等工具......我可以运行它们。我真的不知道从哪里开始寻找问题。

我直接在执行机器上运行ldd,并通过condor提交的脚本以及我的可执行文件。在这两种情况下,ldd报告相同的文件。

我不明白如何直接运行它会起作用,但它会被condor运行失败。最终执行程序的进程condor_startd是一个以root身份启动的进程,并将其有效uid更改为提交者。也许这与它有关?

1 个答案:

答案 0 :(得分:0)

不知道为什么这会导致问题,但罪魁祸首是LANG环境变量。在Condor下运行时未设置,但在本地运行时设置为US_EN.UTF-8。将此值添加到condor执行环境可以解决问题。