J'essaie de trouver un moyen via la ligne de commande Windows pour déterminer si un processus n'a pas de parent.
Je sais que techniquement tous les processus ont un parent contrôlé par le système d'exploitation ou autre, mais par souci de simplicité, il "n'a pas de parent". Par exemple, si vous ouvrez une fenêtre de l'explorateur, celle-ci apparaîtra dans Process Explorer en haut de son arborescence.
Lorsque je fais une requête wmic sur le processus, cependant, je reçois un PID pour 'parentProcessPID'. Lorsque j'essaie de rechercher ce PID à l'aide de la liste des tâches, il indique que le PID n'est pas reconnu. J'ai examiné quelques processus comme celui-ci et ils semblent avoir différents processus parents qui sont tous inaccessibles via la liste de tâches. Si un processus a un processus parent inaccessible via une liste de tâches, cela signifie-t-il qu'il se trouve au "sommet" de son arborescence de processus?
Je demande parce que j'essaie de faire la différence entre un programme qui s'exécute par lui-même et le même programme qui s'exécute comme un processus enfant d'un autre programme.
Par exemple:
Disons que je vais dans le menu Démarrer de Windows et ouvre une fenêtre de l'explorateur. Ensuite, j'ouvre une fenêtre cmd et tapez: explorer.exe
. J'ai maintenant deux processus explorer.exe. L'un est un processus enfant de cmd.exe et l'autre est un processus autonome. Je souhaite pouvoir, via une requête wmic ou une liste de tâches, isoler tous les explorer.exe
processus qui sont des processus autonomes. Ainsi, le processus que j'ai lancé via le menu Démarrer de Windows doit être renvoyé et non le processus lancé par cmd.exe.
Je suis confronté au problème que chaque processus a un ID de processus parent et je ne sais pas comment faire la différence entre un processus parent provenant d'un programme ou un processus parent provenant d'un processus lié au système d'exploitation. Si je peux faire ce qui suit, ce serait formidable:
Pseudocode:
wmic process where name=explorer.exe get parentProcessID,processID
tasklist /fi "PID eq <parentProcessID>" 2>&1> log.txt
if(log.txt contains "INFO: No tasks are running which match the specified criteria."){
// Parent PID is not recognized by tasklist
// Do something
}
Mais je ne suis pas sûr si ma logique est correcte.