2011-07-13 20 views
6

Mogę łatwo uruchomić proces w tle, znaleźć jego pid i przeszukać go na liście uruchomionych procesów.PID procesu gnome-terminal w tle

$gedit & 
$PID=$! 
$ps -e | grep $PID 

To działa dla mnie. Ale jeśli uruchomię gnome-terminal jako proces w tle, to nie zostanie znaleziony na liście wszystkich uruchomionych procesów.

Czy tu czegoś brakuje?

Odpowiedz

5

Wygląda na to, że uruchamiany przez gnome-terminal proces rozpoczyna sam proces, a następnie kończy działanie. Tak więc przechwytywany PID to pid procesu "stub", który uruchamia się, a następnie wyświetla prawdziwy terminal. Robi to, aby można było całkowicie odłączyć od terminalu wywołującego.

Niestety nie znam żadnego sposobu przechwytywania pid procesu "granchild", który został uruchomiony. Jeśli zrobisz ps, zobaczysz proces "wnuka" na gnome-terminalu z rodzicielskim pid z 1.

1

(To tylko przypis) Jak powiedział @Sodved, gnome-terminal uruchamia sam proces, a następnie wychodzi , nie ma sposobu, aby się pid. (Zobacz także Rozdział 7, dlaczego proces podrzędny nie zostanie ponownie dołączony do procesu nadrzędnego po zakończeniu procesu nadrzędnego).

Zauważyłem, że gnome-terminal tworzy tylko jeden raz, więc tutaj jest tylko krótki skrypt dla Twój konkretne zadanie:

GNOME_TERMINAL_PID=`pidof gnome-terminal` 

Jeśli nie masz pidof:

GNOME_TERMINAL_PID=`grep Name: */status | grep gnome-terminal | cut -d/ -f1` 
9

w przypadku korzystania z opcji "--disable-przetwórnie" do gnome-terminal jest to możliwe do wykorzystania w gnome-terminal w sposób, w jaki pragniesz. Domyślnie próbuje użyć już aktywnego terminala, więc to pozwoli ci pobrać pid z tego, który uruchamiasz. Poniższy skrypt otwiera okno na 5 sekund, a następnie go zabija:

#!/bin/bash 
echo "opening a new terminal" 
gnome-terminal --disable-factory & 
pid=$! 
echo "sleeping" 
sleep 5; 
echo "closing gnome-terminal" 
kill -SIGHUP $pid 
Powiązane problemy