Récupérer l'ID du process en cours sur une machine UNIX

Tagged:

Bon c'est pas très compliqué mais fallait y penser !

Le but :

System.out.println("PPID :" + ProcessHelper.getProcessId());
==> PPID :27039

On doit contourner tout un tas de choses en fait ... Java n'a pas ce PPID dans ses variables d'environnement, il ne peut pas accéder aux variables d'environnement de bash ... J'ai essayé avec un appel a /usr/bin/env mais j'ai que les variables de bases ...

Donc l'idée c'est de créer un script qui renvoie ce PPID directement de l'environnement bash ...

Le moyen, on rajoute cette fonction au ProcessHelper :

	public static int getProcessId() throws HelperException {
		try {
			StringBuffer buf = new StringBuffer("");
			buf.append("#!/bin/bash \n");
			buf.append("echo $PPID");
			String scriptName = "/tmp/echoPPID.sh";
			File scriptFile = new File(scriptName);
			FileHelper.createContent(scriptFile, buf);
			exec("chmod +x " + scriptName, true);
			int id = Integer.parseInt(exec(scriptName, true)[0]);
			scriptFile.delete();
			return id;
		} catch (Exception e) {
			throw new HelperException(e);
		}
	}

Avec la fonction du FileHelper qui va bien pour créer un fichier a partir d'un StringBuffer :

	public static void createContent(File file, StringBuffer buffer) throws IOException {
		FileOutputStream fos = new FileOutputStream(file);
		PrintStream stream = new PrintStream(fos);
		stream.print(buffer.toString());
		stream.close();
		fos.close();
	}

On en peut plus simple =)