2010-02-24 6 views
0

J'écris du code Java qui doit être capable d'écrire un fichier pid sur Unix-like ainsi que sur des machines Windows. Sur les machines unix j'écrire un script shell bash qui contient quelque chose comme çaComment écrire un fichier pid dans un fichier batch Windows

command 1>/dev/null 2>&1 & 
echo $! > pidfile 

Il exécute une commande, redirige toutes les sorties en Nirwana et met la commande en arrière-plan (il se détache de la coquille). Le fichier pid contient l'identifiant du processus de la commande. Je peux ensuite aller lire l'identifiant du processus dans le fichier. Tout fonctionne bien.

maintenant sur Windows, je pense que je devrais faire quelque chose comme

start command 

et en quelque sorte l'équivalent de la manière Unix. Le problème est que je n'ai aucun contrôle là où le programme sera utilisé en termes de version de Windows ou ce qui est installé sur la machine. Je n'ai pas non plus accès à une machine Windows pour tester les choses et je n'ai rien trouvé de simple sur le web. Je sais qu'il y a la fonction get-process dans powershell mais je ne sais pas si powershell sera installé sur la machine donc je ne peux pas compter sur ça.

Existe-t-il une commande ou une syntaxe de fichier batch DOS simple qui répond à mes besoins?

+0

L'utilisez-vous pour bloquer ou tuer? –

+0

Je dois être capable de tuer la commande indépendamment plus tard. Ce sera un nouveau démarrage d'une machine virtuelle Java, donc pas de mise en cache interne de Java ou quoi que ce soit d'autre. –

Répondre

2

vous pouvez utiliser un vbscript

Set objFS = CreateObject("Scripting.FileSystemObject") 
Set objArgs = WScript.Arguments 
strProcess = objArgs(0) 
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process") 

Error = objWMIService.Create(strProcess, null, null, intProcessID) 
If Error = 0 Then 
    Wscript.Echo intProcessID 
Else 
    Wscript.Echo Error 
End If 

sur la ligne de commande, par exemple si vous voulez exécuter le bloc-notes:

c:\test> cscript //nologo mycreatepid.vbs "notepad.exe" 
3120 

vous pouvez saisir la valeur de retour dans un fichier batch en utilisant une boucle . (Sinon, vous pouvez apprendre à utiliser vbscript et tout faire dans vbscript)

+0

Puis-je supposer que VBScript doit être installé sur n'importe quelle machine Windows? –

+0

oui. win9x et versions antérieures – ghostdog74

+0

WSH n'était pas livré à l'origine avec Windows 95, bien que vous puissiez facilement l'obtenir séparément, et je suis sûr que les versions OEM ultérieures de 95, ainsi que toutes les versions de 98, l'incluaient. En tout cas, j'assumerais sa présence; Le support de Windows 95 a été officiellement abandonné depuis près d'une décennie maintenant. – ephemient

Questions connexes