从system()调用ksh脚本导致segfault

时间:2012-02-20 13:58:24

标签: c linux ubuntu ksh

我有一个相当好的测试应用程序,我正试图在Ubuntu Linux上工作,并且遇到很多问题,似乎与ksh实现有关。当系统构建命令调用它时,问题似乎就显现出来了。

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

在命令行中,我可以毫无问题地运行命令,并且它可以正常工作。它也适用于我使用的所有其他平台(包括SLES和Fedora Linux)。我也可以通过将脚本中的shebang行更改为#! /bin/bash来使其工作(它所做的大部分工作都是在sed脚本中,所以在shell脚本中没有完成异常命令。)

但我们已经对ksh进行了标准化,主要是因为它是我们仍然支持的旧版AIX上可用的最佳shell,如果默认情况下不包含它,很容易添加到Linux发行版。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

只要脚本shebang是AT&amp; T ksh shell,就可以在这一个盒子上可靠地崩溃。我发现一些系统构建会在一个文件中留下大量挂起的文件指针。不足以达到ulimit问题,但足以让这种奇怪。