2011-09-16 13 views
2

CGIスクリプトから呼び出す必要のあるプログラムをC#で作成しました。CGIスクリプトから呼び出されたときにMonoがハングする

Iは、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') 

応答を無期限プロセスがハングし、ブラウザを待ちます。あなたが気づいたように、私はルート権限を持っていないので、私はホームディレクトリにmonoを "インストール"しています。それはサーバー上でコンパイルされ、実行可能ファイルはそのディレクトリに置かれていますが、他のすべてに対しては正常に動作しているようです。混乱の問題を作る何

は次のとおりです。私は、コマンドまたは実際のCGIスクリプト自身などを呼び出す場合

  • 問題は発生しません。 SSHセッションから。
  • 問題は、プログラムが実行された後に発生するようです。結果をファイルにパイプすると、結果はファイルファイルに表示され、モノは終了後にハングするようです。
  • 問題は、同じcgiスクリプトと.exeではなく、モノが適切にインストールされているMacノートパソコンでは発生しません。
  • スクリプトがmonoなどを呼び出すだけで問題は発生しません。 (subprocess.Popen(['/home/<user>/.mono/bin/mono'], stdout=subprocess.PIPE)) - monoは標準の "あなたは私に何もしていない"というメッセージを出力して正常に終了します。
  • 問題はどのような.exeでも発生します。これは単にhello worldであるか、または実際のプログラムで行われる比較的複雑な計算です。

私はもともと偽のルートで見られることがthe Mono FAQ pageを見ると、これは同じ問題だと思ったとして、世界の書き込み可能なディレクトリにMONO_SHARED_DIRを設定しようとしました。

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 

を私は最後の行とsem_waitをGoogleで検索しましたが、これは共通の問題であると思われるように私は、関連する何かを見つけることができません。

この問題の助けがあれば、非常に感謝しています.C++の私の全プログラムをC#から書き直したいとは思っていません。

バージョン情報:

  • OS:Ubuntuの10.04.3 LTS
  • モノラル:モノラルJITコンパイラのバージョン2.10.2(tarballの土6月18日15時11分20秒BST 2011)
  • アパッチ: Apache/2.2.14(Ubuntu)
+1

出力をフラットファイルにパイプするとき、このハングするモノプロセスを実際に取得しますか?はいの場合、モノインストールで何かが間違っています。 – skolima

+0

はい、まったく同じ応答が得られます:/ home/ /.mono/bin/mono HelloWorld.exe >> outputfile私のモノインストールに問題があると確信していますが、それを修正する。 – SColvin

+0

は本当に奇妙なことですが、私はネイティブスレッドを作成するものにピンボケしたときにのみこれを持っていました。私があなたのボートにいたら、私はソースからモノを作ろうとしています。 – IanNorton

答えて

0

答えはおそらくほとんどの人にとって興味深いわけではありませんが、完全性のために私はそれを提供する必要があります。

私が使用していたサーバーを実行するRetrosnubは、別のWebサーバーとsshサーバーを持っています。私は明らかにsshサーバ上でmonoをコンパイルしていましたが、CGIスクリプトから呼び出すときに、Webサーバによって実行されていました。Webサーバーは、すべての問題を引き起こしたアーキテクチャが異なります(32bitでは64bitではありません)。

関連する問題