Estoy tratando de encontrar una manera de obtener mi propio PID desde un símbolo del sistema (para su uso posterior en scripts de bat) hasta ahora, la única forma útil que encontré fue usar getpids.exe desde aquí: http://www.scheibli.com/ projects / getpids / index.html pero estoy buscando un comando que esté "integrado" en Windows
editar: estoy buscando una forma "a prueba de balas" - no hay suposiciones acerca de que mi proceso sea el único cmd.exe o algo
microseconds
, en lugar de 1/100 segundos, como en% time%), sería más confiable en este caso:wmic os get LocalDateTime
(YearMonthDayHourMinuteSecond.Microsecond + Timezone). A menos que el planificador pueda ejecutar dos cosas exactamente en el mismo microsegundo ...Creo que lo siguiente es a prueba de balas, siempre que el usuario tenga acceso a puntos WMIC y TEMP a una ruta válida donde el usuario tenga privilegios de escritura. Este es el resultado final de un trabajo de colaboración en http://www.dostips.com/forum/viewtopic.php?f=3&t=6133 .
El script establece un bloqueo exclusivo en un archivo temporal que incorpora la hora actual en el nombre. Solo puede haber una colisión si dos procesos por lotes con nombre intentan obtener el PID dentro del mismo intervalo de tiempo de 0.01 segundos, en cuyo caso solo uno tendrá éxito.
Cualquier proceso que falle repetidamente repetirá e intentará nuevamente con una nueva ruta de archivo de bloqueo hasta que tenga éxito.
La ruta completa al archivo de bloqueo se transforma en una ID única que se puede utilizar en la consulta WMIC. WMIC se ejecuta dentro de un comando FOR / F, lo que significa que se ejecuta en un proceso hijo cmd.exe. Es por eso que se recupera el ParentProcessID del proceso cmd.exe.
fuente
Ampliando la respuesta de Tony Roth:
El uso del filtro WINDOWTITLE evita la tubería para que pueda colocarlo en un bucle for y asignarlo a una variable con SET si lo desea:
Eliminarlo lo
/v
hace más rápido y/NH
elimina la línea de encabezado. Necesita el comodín después"uniqueTitle"
porque el título de la ventana realmente contiene el comando actual (por lo tanto, seguiría y seguiría si intentara coincidir completamente).fuente
Usando PowerShell + WMI:
fuente
pwsh -noprofile -c "(Get-Process -Id $PID).Parent.Id"
fuente
si sabe que solo hay un cmd.exe ejecutándose, puede obtener el PID de esta manera:
fuente
Esto debería funcionar:
fuente
Si desea encontrar el PID del nombre de la imagen "notepad.exe", el siguiente código funcionará para usted:
fuente
Si tiene el kit de recursos de Windows 2003, introdúzcalo en qgrep para obtener la línea que desea. Luego puede extraer el pid desde aquí (esto supone que solo tiene un cmd ejecutándose a la vez),
fuente
Echa un vistazo a este pequeño truco de lotes . Establece el título de cmd en un valor especial y luego usa la lista de tareas para encontrarlo. Inventivo
\\ Greg
fuente
ESTA ES LA FORMA CORTA DE OBTENER ID DE PROCESO PARA ABRIR CMD
fuente
Esta respuesta le dará SOLAMENTE la identificación del proceso, y ninguna de las cosas adicionales que incluye la respuesta principal.
Explicación:
-no habrá un PID para cmd.exe que sea mayor que 18100, así que verifique si PID2 es mayor que 8100 para saber si es un número de 4 o 5 dígitos
caso 1: un PID de 5 dígitos como 17504 tiene un PID1 val 17504 y un PID2 val de 1750, por lo que usamos PID1
caso 2: un PID de 4 dígitos como 8205 tiene un valor PID1 de 8205 "y un valor PID2 de 8205, por lo que utilizamos PID2
caso 3: un PID de 4 dígitos como 4352 tiene un valor PID1 de 4352 "y un valor PID2 de 4352, por lo que usamos PID2
fuente