Process有时无法运行Main方法中的任何内容,并卸载了app域

本文关键字:任何内 卸载 app 运行 方法 Main Process | 更新日期: 2023-09-27 18:12:50

我有两个c#应用程序,其用户界面运行在Mono 4.0.3和OpenSUSE 13.1上。第一个应用程序启动第二个应用程序,然后等待它退出。有时(比如10次中有1次),第二个应用程序加载"失败"——进程将启动,但处理器时间为0%。如果我放置一个控制台。WriteLine在Main方法的最开始,这个WriteLine永远不会发生。

我非常简单地启动这个进程:

var psi = new ProcessStartInfo("mono", " --gc=boehm MyProgram.exe");
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.UseShellExecute = false;
var process = Process.Start(psi);

按照调试Mono的步骤,gdb的mono_backtrace输出如下:

#0  0x00007f4dbc966c1b in sigsuspend () from /lib64/libc.so.6
#1  0x0000000000615941 in GC_suspend_handler ()
#2  <signal handler called>
#3  0x00007f4dbcf030ad in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#4  0x00000000005df2d3 in _wapi_handle_timedwait_signal_handle ()
#5  0x00000000005f26fb in wapi_WaitForSingleObjectEx ()
#6  0x00000000005a9062 in mono_domain_try_unload ()
#7  0x00000000005a9154 in mono_domain_unload ()
#8 0x401931d2 in  (wrapper managed-to-native) System.AppDomain:InternalUnload (int) + 0x52 (0x40193180 0x401931fe) [0x7f4dbd9c0d48 - MyProgram.exe]
#9  0x00007f4daa37d370 in ?? ()
#10 0x00007f4daa37d370 in ?? ()
#11 0x00007f4daa37d370 in ?? ()
#12 0x0000000001f17068 in ?? ()
#13 0x00007f4daa359af0 in ?? ()
#14 0x0000000001abb1d0 in ?? ()
#15 0x40192dd4 in <0x40192dd4 - JIT trampoline for System.AppDomain:InternalUnload (int)>
#16 0x00007fff4c7a9fe0 in ?? ()
#17 0x00007fff4c7a9ed0 in ?? ()
#18 0x40192da8 in  System.AppDomain:Unload (System.AppDomain) + 0x28 (0x40192d80 0x40192dd4) [0x7f4dbd9c0d48 - MyProgram.exe]

我不知道这里发生了什么,我的谷歌已经证明是徒劳的。什么好主意吗?

编辑:作为对@ employerussian评论的回应,以下是thread apply all where的输出:

Thread 10 (Thread 0x7f4dbc0f7700 (LWP 7994)):
#0  0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x0000000000615823 in GC_wait_marker ()
#2  0x000000000060dad5 in GC_help_marker ()
#3  0x0000000000613f87 in GC_mark_thread ()
#4  0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5  0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 9 (Thread 0x7f4dbb8f6700 (LWP 7995)):
#0  0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x0000000000615823 in GC_wait_marker ()
#2  0x000000000060dad5 in GC_help_marker ()
#3  0x0000000000613f87 in GC_mark_thread ()
#4  0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5  0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 8 (Thread 0x7f4dbb0f5700 (LWP 7996)):
#0  0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x0000000000615823 in GC_wait_marker ()
#2  0x000000000060dad5 in GC_help_marker ()
#3  0x0000000000613f87 in GC_mark_thread ()
#4  0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5  0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 7 (Thread 0x7f4dba8f4700 (LWP 7997)):
#0  0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x0000000000615823 in GC_wait_marker ()
#2  0x000000000060dad5 in GC_help_marker ()
#3  0x0000000000613f87 in GC_mark_thread ()
#4  0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5  0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 6 (Thread 0x7f4dba0f3700 (LWP 7998)):
#0  0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x0000000000615823 in GC_wait_marker ()
#2  0x000000000060dad5 in GC_help_marker ()
#3  0x0000000000613f87 in GC_mark_thread ()
#4  0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5  0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 5 (Thread 0x7f4db98f2700 (LWP 7999)):
#0  0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x0000000000615823 in GC_wait_marker ()
#2  0x000000000060dad5 in GC_help_marker ()
#3  0x0000000000613f87 in GC_mark_thread ()
#4  0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5  0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 4 (Thread 0x7f4db90f1700 (LWP 8000)):
#0  0x00007f4dbcf030af in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x0000000000615823 in GC_wait_marker ()
#2  0x000000000060dad5 in GC_help_marker ()
#3  0x0000000000613f87 in GC_mark_thread ()
#4  0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#5  0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 3 (Thread 0x7f4db832b700 (LWP 8001)):
#0  0x00007f4dbc966c1b in sigsuspend () from /lib64/libc.so.6
#1  0x0000000000615941 in GC_suspend_handler ()
#2  <signal handler called>
#3  0x00007f4dbcf0589a in __lll_lock_wait () from /lib64/libpthread.so.0
#4  0x00007f4dbcf014d7 in _L_lock_913 () from /lib64/libpthread.so.0
#5  0x00007f4dbcf01300 in pthread_mutex_lock () from /lib64/libpthread.so.0
#6  0x0000000000615235 in GC_pthread_join ()
#7  0x0000000000592b67 in mono_threads_join_threads ()
#8  0x00000000005ad192 in finalizer_thread ()
#9  0x0000000000590af4 in start_wrapper ()
#10 0x0000000000604906 in inner_start_thread ()
#11 0x0000000000615456 in GC_start_routine ()
#12 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#13 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 2 (Thread 0x7f4da99c0700 (LWP 8004)):
#0  0x00007f4dbcf050f0 in sem_wait () from /lib64/libpthread.so.0
#1  0x0000000000615ccc in GC_stop_world ()
#2  0x0000000000606b05 in GC_stopped_mark ()
#3  0x0000000000607407 in GC_try_to_collect_inner ()
#4  0x0000000000607626 in GC_try_to_collect ()
#5  0x00000000006076ae in GC_gcollect ()
#6  0x00000000005ac7ac in mono_domain_finalize ()
#7  0x00000000005a6874 in unload_thread_main ()
#8  0x0000000000604906 in inner_start_thread ()
#9  0x0000000000615456 in GC_start_routine ()
#10 0x00007f4dbceff0db in start_thread () from /lib64/libpthread.so.0
#11 0x00007f4dbca1890d in clone () from /lib64/libc.so.6
Thread 1 (Thread 0x7f4dbda2b740 (LWP 7991)):
#0  0x00007f4dbc966c1b in sigsuspend () from /lib64/libc.so.6
#1  0x0000000000615941 in GC_suspend_handler ()
#2  <signal handler called>
#3  0x00007f4dbcf030ad in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#4  0x00000000005df2d3 in _wapi_handle_timedwait_signal_handle ()
#5  0x00000000005f26fb in wapi_WaitForSingleObjectEx ()
#6  0x00000000005a9062 in mono_domain_try_unload ()
#7  0x00000000005a9154 in mono_domain_unload ()
#8  0x00000000401931d2 in ?? ()
#9  0x00007f4daa37d370 in ?? ()
#10 0x00007f4daa37d370 in ?? ()
#11 0x00007f4daa37d370 in ?? ()
#12 0x0000000001f17068 in ?? ()
#13 0x00007f4daa359af0 in ?? ()
#14 0x0000000001abb1d0 in ?? ()
#15 0x0000000040192dd4 in ?? ()
#16 0x00007fff4c7a9fe0 in ?? ()
#17 0x00007fff4c7a9ed0 in ?? ()
#18 0x0000000040192da8 in ?? ()
#19 0x0000000000000000 in ?? ()

Process有时无法运行Main方法中的任何内容,并卸载了app域

我在mono 4.0.3的测试自动化中看到挂起和一些段错误(包括在nunit和我自己的进程中)-这在3.12.1中很好-一旦我升级到mono 4.0.4.1就解决了

我在4.0.4的发布说明中没有看到任何看起来直接相关的内容。但绝对解决了我遇到的这些问题。