Question Comment puis-je trouver les arguments de ligne de commande d'un programme en cours d'exécution?


Je recherche un outil ou une méthode pour savoir quels paramètres de ligne de commande ont été transmis à un programme, par exemple lorsqu'il a été exécuté par un autre programme (scénario d'application de lanceur).


72
2018-04-22 14:36


origine




Réponses:


Vous pouvez le faire en utilisant Explorateur de processus.

Passez votre souris sur un processus pour voir les arguments de la ligne de commande utilisés pour le démarrer:
enter image description here

Alternativement, vous pouvez ouvrir le Propriétés du processus et inspecter la ligne de commande juste là:
enter image description here


62
2018-04-22 14:39



C'est vraiment cool. - cutrightjm
Malheureusement, il ne semble pas fonctionner avec les applications protégées avec WinLicense / Themida: oreans.com/winlicense.php D'autres idées? - Gepard
@Gepard: Comment savez-vous que cela ne fonctionne pas? Êtes-vous sûr que l'application était en fait appelée avec des arguments de ligne de commande? De toute façon, PE utilise le Façon Windows de déterminer cette information. Je suppose que toute autre chose devrait être personnalisée pour une application spécifique. - Der Hochstapler
Mon mauvais, ça n'a pas fait monter PE. Cela fonctionne comme prévu. - Gepard
@OliverSalzburg, comment fonctionnait ce programme? Un programme C normal peut-il y parvenir? - Pacerier


Vous pouvez également le faire sans Process Explorer, en utilisant le service WMI de Windows. Exécutez les opérations suivantes à partir de l'invite de commandes:

WMIC path win32_process get Caption,Processid,Commandline

Si vous voulez vider la sortie dans un fichier (cela facilite la lecture), utilisez le commutateur / OUTPUT:

WMIC /OUTPUT:C:\Process.txt path win32_process get Caption,Processid,Commandline

77
2017-12-15 17:29



Nice, comment as-tu su cela? - Pacerier
@Pacerier: Je ne suis pas sûr d'être honnête ;-) Je pense que cela est dû au fait de contourner les docs WMI et de jouer parce que je devais utiliser WMI pour quelque chose à l'époque. - Andy E
De quels documents WMI parlez-vous? - Pacerier
C'était une méthode de ligne de commande très utile pour obtenir la ligne de commande d'un processus en cours d'exécution. Dans mon cas, j'ai été en mesure de modifier ceci légèrement pour obtenir un résultat uniquement pour un processus spécifique: chemin WMIC win32_process où "caption = 'cmd.exe'" get ligne de commande - chriv
Génial, et la clause where prend en charge certaines fonctionnalités SQL, par exemple, où "name like 'cmd.%' - zhaorufei


On peut aussi y parvenir en utilisant Gestionnaire des tâches.

Ouvrez le gestionnaire de tâches (par CTRL-SHIFT-ESC, CTRL-ALT-DELETE ou toute autre méthode).

Pour Windows 7 (et probablement Windows XP):

  • Allez dans l'onglet "Processus". Le dans le menu "Affichage", sélectionnez "Sélectionner les colonnes ...".
  • Cochez la case "Ligne de commande" et cliquez sur OK. (Vous devrez peut-être faire défiler pour le trouver)

Pour Windows 8:

  • Allez dans l'onglet "Détails". Cliquez avec le bouton droit sur l'une des colonnes (par exemple, noms, PID, etc.) et sélectionnez "Sélectionner les colonnes".
  • Cochez la case "Ligne de commande" et cliquez sur OK. (Vous devrez peut-être faire défiler pour le trouver)

Une colonne de lignes de commande de sera ajoutée aux colonnes actuellement affichées.


29
2017-10-03 07:28



Je ne vous comprends pas vraiment, JesseBarnum, on peut toujours redimensionner la colonne pour avoir une vue complète, peu importe la longueur de la ligne de commande, non? - Jeromy Adofo
Seulement si la fenêtre est suffisamment large pour la taille de la commande. Si la commande ressemble à un processus Java avec un long classpath, cela ne rentre pas dans la largeur de la fenêtre. - Jesse Barnum
D'accord merci, a noté. Je n'ai pas eu ce problème et par la façon dont mon gestionnaire de tâches est défilable - ne sais pas sur les vôtres :-). Je pense que si vous pouvez m'envoyer un exemple de programme à essayer, cela pourrait régler le problème. - Jeromy Adofo
Ceci est une réponse largement sous-estimée, ne savait pas que c'était possible. - Hashim
Je vois quelques commentaires ci-dessus à propos du Gestionnaire des tâches Windows. Même si vous définissez la colonne "Ligne de commande" pour afficher un processus Java avec une longue ligne de commande, celle-ci sera tronquée. MAIS, vous pouvez cliquer sur la ligne dans le Gestionnaire des tâches et "copier" (Ctrl-c) la ligne entière et la coller dans un éditeur de texte pour voir la ligne de commande entière, peu importe la durée. - JohnD


PowerShell à la rescousse.

Get-WmiObject Win32_Process -Filter "name = 'perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\perl\bin\perl.exe" t/Server_PreFork.t'} | ForEach-Object { Invoke-WmiMethod -Path $_.__Path –Name Terminate }

trouver, et tuer comme bonus. vous pouvez l'exécuter directement depuis powershell ou depuis un ps1 si vous avez votre configuration système. Je détaille la configuration du script sans restriction sur je tue des zombies avec Powershell ainsi que d'autres astuces de PowerShell ...


4
2017-08-07 05:46



Whoa ... la partie meurtrière est assez dangereuse, vu le titre de la question;) Autre réponse très nette;) - Tom


Les réponses précédentes sont excellentes dans le cas où le processus est déjà en cours et ne se terminera pas bientôt. Cependant, si vous avez besoin (comme je l'ai fait) de le faire, les processus démarrent plusieurs fois et / ou peuvent se terminer rapidement, ou peut-être enregistrer des occurrences sur une période de temps plus longue. Process Monitor.

Fondamentalement, il enregistre divers événements dans le système, dans ce cas, nous pouvons simplement filtrer l'événement "Process Start" et le nom du processus que nous voulons surveiller, comme indiqué ci-dessous:

enter image description here

Ensuite, gardez le moniteur de processus en marche et faites tout ce que vous faites pour obtenir le processus que vous souhaitez enregistrer. Vous pouvez voir dans la colonne "Détail" ou dans la colonne "Ligne de commande" (dépend de la façon dont vous les configurez) les arguments de la ligne de commande. Par exemple:

enter image description here

Bien sûr, vous pouvez extraire beaucoup plus d'informations connexes telles que le répertoire de travail, les variables d'environnement transmises, etc. Il est également facile d'exporter les résultats dans un fichier.


3
2018-01-27 10:39





En utilisant CygWin, si je commence un Python process, ceci est un exemple de ligne de commande:

c:\CygWin\bin\python2.7.exe /usr/local/bin/sudoserver.py

Mais Explorateur de processus ne voit que l'exe principal:

Process Explorer not detecting full command line of Python process

(noter la "chemin: [message d'ouverture du processus d'erreur]" (voir EDIT-1)). Même résultat pour tasklist:

C:\>tasklist | find "python" /i
python2.7.exe                 5740 Console                    1    15.312 KB

Donc, le seul truc que je connaisse jusqu'à maintenant, c'est de le trouver via CygWin Bash shell  pgrep:

Luis@Kenobi /cygdrive/c/
$ pgrep -f -l server.py
5740 /usr/bin/python2.7 /usr/local/bin/sudoserver.py

Il est utile de le savoir, tant que CygWin cohabite sans problèmes dans Windows, et que vous pouvez l'utiliser pour exécuter de nombreux programmes POSIX et Python.

EDIT: Sous Windows, vous ne semblez pas avoir besoin de privilèges d'administrateur pour la liste des tâches. Dans CygWin, vous en aurez besoin pour voir le processus d'un administrateur (ce qui me semble plus logique: la ligne de commande complète pourrait avoir certains paramètres comme les mots de passe à l'intérieur), nous devons donc exécuter le CygWin Bash in élevé  Mode administrateur.

EDIT-1: Ce problème ne se produira pas si vous exécutez Process Explorer en tant qu'administrateur. Merci pour votre pointage, @Pacerier.


1
2018-04-07 15:07



Si vous courez en tant qu'administrateur, vous ne verriez pas [Error opening process message] - Pacerier
Tu avais raison, @Pacerier. Trop évident pour s'en souvenir :-). Merci. J'ai édité mon post pour le refléter. - Sopalajo de Arrierez


aller à run ou goto start et recherche:

tasklist -m

tasklist -svc

-3
2017-11-02 04:46



Cela ne montre pas la ligne de commande appelante. /m affiche les modules chargés (DLL, etc.) et /svc affiche les services hébergés dans chaque processus. - Bob