2011-09-16 24 views
2

我有一個用C#編寫的程序,需要從CGI腳本調用。當從CGI腳本中調用時單聲道掛起

當我打電話,無論是從Python或bash的CGI腳本程序:

#!/bin/bash 
echo Content-type: text/plain 
echo 
echo  
/home/<user>/.mono/bin/mono HelloWorld.exe 

#!/usr/bin/python 

import subprocess 

print 'Content-type: text/plain\n\n' 
p=subprocess.Popen(['/home/<user>/.mono/bin/mono','HelloWorld.exe'], stdout=subprocess.PIPE) 
print p.stdout.read().strip('\r\n') 

進程掛起,瀏覽器將無限期等待響應。正如你將會注意到我的主目錄中有單聲道「已安裝」,因爲我沒有root權限。它是在服務器上編譯的,可執行文件只是坐在那個目錄下,但它似乎對其他所有內容都很好。

是什麼讓混亂的問題是:如果我調用命令或事實上的CGI腳本自己如不發生

  • 問題。來自SSH會話。
  • 該程序運行後似乎會出現問題:如果我將結果傳送給文件,結果將顯示在文件文件中,單聲道似乎在完成後掛起。
  • 這個問題不會發生在我的Mac筆記本電腦有相同的CGI腳本和.exe,但與單聲道正確安裝。
  • 如果腳本只是調用單聲道,則不會發生問題。 (subprocess.Popen(['/home/<user>/.mono/bin/mono'], stdout=subprocess.PIPE)) - 單聲道只是打印標準「你給我什麼都不做」的消息,並正常退出。
  • 問題發生在任何.exe中,無論是隻是hello world還是進行一些相對複雜的計算,這是我的實際程序所做的。

我試過設置MONO_SHARED_DIR到一個目錄是世界可寫的,因爲我原本以爲這是同樣的問題,與假根看到看到the Mono FAQ page

gdb給出了下面的輸出:

Loaded symbols for /lib/libpthread.so.0 
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done. 
Loaded symbols for /lib/libc.so.6 
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done. 
Loaded symbols for /lib64/ld-linux-x86-64.so.2 
Reading symbols from /lib/libnss_compat.so.2...(no debugging symbols found)...done. 
Loaded symbols for /lib/libnss_compat.so.2 
Reading symbols from /lib/libnsl.so.1...(no debugging symbols found)...done. 
Loaded symbols for /lib/libnsl.so.1 
Reading symbols from /lib/libnss_nis.so.2...(no debugging symbols found)...done. 
Loaded symbols for /lib/libnss_nis.so.2 
Reading symbols from /lib/libnss_files.so.2...(no debugging symbols found)...done. 
Loaded symbols for /lib/libnss_files.so.2 
0x00007f85d7680b50 in sem_wait() from /lib/libpthread.so.0 

我GOOGLE的最後一行,並sem_wait但是這似乎是一個常見的問題,我無法找到任何有關。

對這個問題的任何幫助將非常感謝,我真的不想用C#從C++重寫我的整個程序。

版本信息:

  • 操作系統:Ubuntu的LTS 10.04.3
  • 單聲道:單聲道JIT編譯器版本2.10.2(壓縮包星期六6月18日十五時十一分20秒BST 2011)
  • 阿帕奇: Apache/2.2.14(Ubuntu)
+1

你真的得到這個掛單過程中,當您管道輸出到一個平面文件?如果是,那麼你的單聲道安裝有些問題。 – skolima

+0

是的,我得到完全相同的響應:/家庭/ /.mono/bin/mono >> HelloWorld.exe的OUTPUTFILE我敢肯定有什麼毛病我的單安裝,但我很想知道什麼和如何要解決這個問題。 – SColvin

+0

真的很奇怪,當我pinvoked成創建本地線程,從來都不是平坦的託管代碼的東西我有這個只。如果我在您的船上,請嘗試從源代碼構建單聲道。 – IanNorton

回答

0

答案可能對大多數人來說並不有趣,但爲了完整性,我應該提供它。

運行我正在使用的服務器的Retrosnub具有單獨的Web服務器和ssh服務器。我明顯在ssh服務器上編譯了mono,但是當我嘗試從CGI腳本調用它時,它正在被web服務器執行。網絡服務器具有不同的架構(32位而不是64位),這造成了所有問題。