2012-02-20 118 views
1

我有一个应用程序,我试图让工作在Ubuntu Linux,并且有很多的问题,看似与KSH执行的相当好测试位。当系统构建命令调用它时,问题似乎就会显现出来。调用KSH脚本()导致段错误

有一个KSH脚本自动生成从C源文件C头文件。当我尝试通过在C应用程序中调用system()来运行它时,ksh崩溃时发生段错误。

在命令行,我可以毫无问题运行命令,它能够正常工作。它也适用于我使用的所有其他平台(包括SLES和Fedora Linux)的相同情况。我还可以通过将脚本中的shebang行更改为#! /bin/bash(它所做的大部分工作实际上都是在sed脚本中,因此shell脚本中没有特殊的命令)。

但我们已经标准化了KSH,主要是因为它是对我们仍然支持旧的AIX版本中提供的最好的壳,而且很容易,如果它默认情况下不包括添加到Linux发行版。

我不太确定在哪里看这个 - 有没有人看过类似的东西?

+0

把一些代码,可能是其他的代码是导致此段错误 – 2012-02-20 14:00:54

+0

我不知道哪个代码发布真的。整个shell脚本太大了,而且它似乎没有那么大。至于C代码,它实际上只是在做系统(“ut_ext misc_lib”)。 – asc99c 2012-02-20 14:11:03

+0

把c代码.. – 2012-02-20 14:17:08

回答

0

有关信息,我终于找出导致问题的具体情况。最基本的方法就是打开100个文件指针到同一个文件,然后调用system()

for(i = 0; i < 100; i++) 
    fopen("file", "r"); 
system("script"); 

只要脚本家当是AT &牛逼ksh的外壳,能可靠地崩溃就这一个箱子。我发现系统的一小部分内容会将很多挂起的文件指针留给一个文件。不足以造成ulimit问题,但足以造成这种奇怪。

0

看看您是否可以通过在系统调用中放置完整路径来解决问题。 如果在使用ksh时未能找到预期的路径,这可能是问题的一部分。