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)
出力をフラットファイルにパイプするとき、このハングするモノプロセスを実際に取得しますか?はいの場合、モノインストールで何かが間違っています。 – skolima
はい、まったく同じ応答が得られます:/ home/ /.mono/bin/mono HelloWorld.exe >> outputfile私のモノインストールに問題があると確信していますが、それを修正する。 –
SColvin
は本当に奇妙なことですが、私はネイティブスレッドを作成するものにピンボケしたときにのみこれを持っていました。私があなたのボートにいたら、私はソースからモノを作ろうとしています。 – IanNorton