Каждое работающее приложение имеет родительское приложение , которое его запустило (кроме процесса корневой системы).
Невозможно сказать, всякий раз, когда пользователь непосредственно нажимает на приложение, чтобы запустить его или нет.
Пример: взять оболочку Explorer (не Internet Explorer).
Вы можете дважды щелкнуть любое приложение, чтобы запустить его. Родительским процессом будет файл explorer.exe.
Вы можете щелкнуть правой кнопкой мыши по любому файлу, и загрузится несколько расширений контекстного меню. Некоторые из них могут запускать внешние приложения, скажем, для предварительного просмотра видео-файла (я видел это, клянусь!). Родительским процессом будет файл explorer.exe, но пользователь не выделил ни одного приложения. Он просто хочет просмотреть свойства файла. Он даже не знал, что приложения были запущены!
Пример: возьмите Total Commander или любые другие двухпанельные файловые менеджеры, которые поддерживают плагины для архивов.
- Вы можете дважды щелкнуть по любому
приложение для его запуска. Родитель
процесс будет totalcmd.exe.
- Вы можете ввести архивный файл и скопировать
(извлечь) несколько файлов из него на ваш
Папки для документов. соответствующий
плагин может обрабатывать извлечение
сам или запустить невидимый процесс
справиться со всей работой. Все, что вы видите, это
индикатор выполнения в Total Commander. Но
есть новый процесс и его родитель
снова is totalcmd.exe.
Нет различий между случаями 1 и 2 в обоих примерах.
Кстати, определение "запущено пользователем" неясно. Вы даже можете сказать, что ничего не может произойти без команды пользователя. Все эти фоновые процессы в случаях № 2 были запущены, потому что пользователь попросил об этом. Ну, пользователь явно не просил lauch, но он попросил саму операцию.