CreateProcess: ошибка создания дескриптора процесса - PullRequest
0 голосов
/ 09 января 2012

Недавно я разрабатывал приложение на C # и использую Mono для запуска его на Linux, я специально тестирую на Debian 6.

Через 2-8 часов приложение продолжает показывать предупреждение, то есть CreateProcess: ошибка создания дескриптора процесса.Это предупреждение было опубликовано ранее в нескольких списках рассылки mono, включая mono-devel и mono-bugs, одна конкретная запись в списке mono-devel - http://mono.1490590.n4.nabble.com/Mono-CreateProcess-error-td1525870.html, а в некоторых других местах упоминается предупреждение.

Мое приложение создает не менее 10 процессов в минуту, которые обычно выполняются менее чем за секунду / полсекунды, и я также вызывал process.WaitForExit () и process.Dispose (), чтобы попытаться помочь обойти ошибку, как это предлагается в других электронных письмах.и, как я видел в Google, но, к сожалению, это не помогло.

Когда происходит ошибка, это приводит к тому, что будущие процессы не создаются.

Мне было интересно, есть ли у кого-нибудь потенциалРешения, это происходит как на 2.10.2, так и на 2.10.6.

Я видел этот тест / пример здесь:

http://lists.ximian.com/pipermail/mono-bugs/2009-September/092261.html

Я вставил его сюдадля простоты использования:

System.Diagnostics.Process[] processes = new System.Diagnostics.Process[4096];
for (int i = 0; i < 4096; i++)
{
    Console.WriteLine("Starting: " + i.ToString());
    processes[i] = new System.Diagnostics.Process();
    processes[i].StartInfo.FileName ="echo";
    processes[i].StartInfo.Arguments = "\"hello mono \";";
    processes[i].Start();

    System.GC.Collect();
    System.GC.WaitForPendingFinalizers();
    System.Threading.Thread.Sleep(10);
}

Извините, что повторно задавал этот вопрос, если он был задан, но я еще не нашел работающего решения.

Спасибо!

1 Ответ

1 голос
/ 11 января 2012

Я думаю, что вы используете файловые дескрипторы, чтобы общаться с каждым процессом.

См. здесь :

2009-09-06 08:59:10 UTC Йоаким Сандстрём написал:

Извините за двойной пост.

Эта проблема была решена путем создания второго цикла с циклом для HasExited. И затем принудительно (попробуйте поймать) работает. Закрыть на процессы, которые имели вышел.

Это работает для вас? Я считаю, что вызов Process.Close() закроет дескрипторы открытых файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...