gpt4 book ai didi

c# - 从 CGI 脚本调用时 Mono 挂起

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:17 25 4
gpt4 key购买 nike

我有一个用 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')

进程挂起,浏览器无限期地等待响应。正如您所注意到的,我在我的主目录中“安装”了 mono,因为我没有 root 权限。它是在服务器上编译的,可执行文件就位于该目录中,但它似乎适用于其他所有内容。

使问题困惑的是:

  • 如果我自己调用命令或 cgi 脚本,问题就不会发生,例如。来自 SSH session 。
  • 问题似乎是在程序运行后出现的:如果我将结果通过管道传输到文件中,结果将出现在文件文件中,mono 似乎只是在完成后挂起。
  • 在我的 mac 笔记本电脑上,使用相同的 cgi 脚本和 .exe,但正确安装了单声道,则不会出现此问题。
  • 如果脚本只调用 mono 例如,问题就不会发生。 ( subprocess.Popen(['/home/<user>/.mono/bin/mono'], stdout=subprocess.PIPE) ) - mono 只打印标准的“你让我无事可做”消息并正常退出。
  • 任何 .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

我用谷歌搜索了最后一行和 sem_wait但我找不到任何相关内容,因为这似乎是一个常见问题。

非常感谢对此问题的任何帮助,我真的不想从 C# 用 C++ 重写我的整个程序。

版本信息:

  • 操作系统:Ubuntu 10.04.3 LTS
  • Mono:Mono JIT 编译器版本 2.10.2(压缩包 2011 年 6 月 18 日星期六 15:11:20 BST)
  • Apache:Apache/2.2.14 (Ubuntu)

最佳答案

大多数人可能对答案不感兴趣,但为了完整起见,我应该提供它。

运行我使用的服务器的 Retrosnub 有一个单独的网络服务器和 ssh 服务器。我显然已经在 ssh 服务器上编译了 mono,但是当我尝试从 CGI 脚本调用它时,它正在由 Web 服务器执行。 Web 服务器具有不同的体系结构(32 位而非 64 位),这导致了所有问题。

关于c# - 从 CGI 脚本调用时 Mono 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7442647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com