Ich habe eine Java-Anwendung erstellt, die Prozesse starten und ihre PIDs erfassen kann, damit die Anwendung den Prozess überwachen kann.Der Benutzer kann später den gesamten Prozessbaum (Sitzung) beenden.Ich habe dies mit setsid getan.Ein Szenario besteht darin, eine ganze Reihe verschiedener Prozesse über ein Shell-Skript zu starten: setsid <shell script>
.Die PID stellt die neue Sitzung dar. Wenn Sie sie beenden, werden alle in dieser Sitzung erzeugten Prozesse beendet.Es hat super funktioniert, bis Ubuntu 12.10 veröffentlicht wurde.Jetzt kann ich nicht alle Sitzungen beenden, die über setsid gestartet wurden.Ein Beispiel ist Firefox und Google Earth.Gedit kann immer noch getötet werden, wenn es über setsid gestartet wird.
Ich habe ein einfaches Testprogramm erstellt, das kill -SIGTERM -PID
ausführt.Das Testprogramm schafft es, Firefox zu töten, das über setsid unter Ubuntu 12.04 gestartet wurde, jedoch nicht unter Ubuntu 12.10.Ich weiß nicht, was sich geändert hat.Ich habe das Programm in beiden Distributionen mit OpenJDK 6, 7 und Oracle JDK 6 ausgeführt.
public class kill
{
public static void main(String[] args)
{
try
{
System.out.println("kill -SIGTERM -" + args[0]);
Process proc = Runtime.getRuntime().exec("kill -SIGTERM -" + args[0]);
int exitVal = proc.waitFor();
System.out.println("Exit value: " + exitVal); // often 1 under Ubuntu 12.10
}
catch (Exception e)
{
}
}