У меня есть приложение A, которое я хотел бы иметь возможность вызывать произвольные другие процессы, как указано пользователем в файле конфигурации.Запустить произвольные подпроцессы в Windows и до конца закончить?
Batch script B - это один из таких процессов, который пользователь хотел бы вызывать A. B устанавливает некоторые переменные среды, показывает некоторые сообщения и вызывает компилятор C для выполнения некоторой работы.
Предоставляет ли Windows стандартный способ для безупречного прекращения любых процессов? Предположим, что A запущен в консоли и получает CTRL + C. Может ли это передать это B и C? Предположим, что A работает в окне, и пользователь пытается закрыть окно, может ли он отменить B и C?
TerminateProcess - это вариант, но не очень хороший. Если A использует TerminateProcess на B, C продолжает работать. Это может вызвать неприятные проблемы, если C долго работает, поскольку мы можем запустить другой экземпляр C для работы с одними и теми же файлами, в то время как первый экземпляр C все еще работает тайно. Кроме того, TerminateProcess не приводит к чистому выходу.
GenerateConsoleCtrlEvent звучит неплохо и может работать, когда все работает в консоли, но в документации говорится, что вы можете отправлять CTRL + C только на свою консоль, и поэтому не помогло бы, если бы A было запущено в окне.
Есть ли эквивалент SIGINT в Windows? Я хотел бы найти статью, подобную этой: http://www.cons.org/cracauer/sigint.html для Windows.
+1 для хорошего вопроса. Забавно, что ответов не было ... Я не знаю сигнального механизма в Win32. Когда мне нужно было уведомлять дочерние процессы, я отправил сообщение WM_CLOSE в приложения с графическим интерфейсом. Для консольных приложений я создал их, добавляя потоки ввода и вывода в основное приложение, и когда я хотел их закончить, я просто закрыл входной поток. Что касается детей детей и т. Д., Я полагался на своих прямых детей, чтобы очистить их зависимости :). –