我有一个用C#编写的程序,我需要从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权限。它是在服务器上编译的,可执行文件只是位于该目录中,但它似乎适用于其他所有内容。
让问题混淆的是:
subprocess.Popen(['/home/<user>/.mono/bin/mono'], stdout=subprocess.PIPE)
) - mono只打印出标准的“你给我无事可做”的信息并正常退出。我已经尝试将MONO_SHARED_DIR
设置为一个世界可写的目录,因为我原先认为这与使用伪root看到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
我用谷歌搜索了最后一行sem_wait
,但我找不到任何相关内容,因为这似乎是一个常见的问题。
非常感谢有关此问题的任何帮助,我真的不想用C#用C ++重写我的整个程序。
版本信息:
答案 0 :(得分:0)
对大多数人来说,答案可能并不有趣,但为了完整起见,我应该提供。
运行我正在使用的服务器的Retrosnub有一个单独的Web服务器和ssh服务器。我显然在ssh服务器上编译了mono,但是当我尝试从CGI脚本调用它时,它正由Web服务器执行。 Web服务器具有不同的体系结构(32位而不是64位),这导致了所有问题。