我有一個用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)
你真的得到這個掛單過程中,當您管道輸出到一個平面文件?如果是,那麼你的單聲道安裝有些問題。 – skolima
是的,我得到完全相同的響應:/家庭/ /.mono/bin/mono >> HelloWorld.exe的OUTPUTFILE我敢肯定有什麼毛病我的單安裝,但我很想知道什麼和如何要解決這個問題。 –
SColvin
真的很奇怪,當我pinvoked成創建本地線程,從來都不是平坦的託管代碼的東西我有這個只。如果我在您的船上,請嘗試從源代碼構建單聲道。 – IanNorton