Chcę w javie odpalić takie polecenie:
a) java -cp jakis.jar polecenie > /tmp/output 2>&1 & echo $!
W bashu dostaje pid, np. 1234 (po to echo $! żeby wiedzieć do kogo wysłać potem sygnał) i wówczas mogę przekazać programowi sygnał tak:
kill -2 -1234 (koniecznie chce wysłać do całej grupy SIGINT).
program odpalam java Test &
chodzi o to, żeby Test miało inne process group ID (ppid) niż polecenie a)
Niestety po sprawdzeniu /proc/.../stat Task ma identyczne ppid jak polecenie a)
Na stacku (http://stackoverflow.com/questions/5161321/change-process-groups-on-runtime-getruntime-exec-processes)mówią, że bash -c nadaje nowe ppid ale ja tego w man nie znalazłem (no i mi nie nadaje nowego).
Czy żeby to osiągnąć trzeba użyć setsid?
program (minimalna wersja do testów)
import java.io.Console;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.io.IOException;
import java.io.InputStreamReader;
class Test{
public static void main(String[] args) throws IOException{
String cmd[] = {
"/bin/bash",
"-c",
"java -cp /sciezka_do_jar/moj.jar polecenie > /tmp/output 2>&1 & echo $!"
};
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while (true) {
line = in.readLine();//zdobede pid z echo $!
if(line!=null)
System.out.println(line);
}
}
}