2012-02-20 117 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時未能找到預期的路徑,這可能是問題的一部分。