Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Nie bardzo wiedziałem w którym dziale zamieścić temat, bo pod żaden mi nie podchodził mój problem. Przepraszam jeśli nie wcelowałem
Mam pytanie odnośnie procesów w tle, a mianowicie ich przywracania na pierwszy plan. Przedstawię problem.
Jest otwarty terminal i powołuję proces w tle poleceniem nazwa_programu & - dostaję w zwrocie ID(nie wiem jak to nazwać) lokalnych procesów(?) i ID procesu[PID]
bartek@bartek-deb:~$ gedit & [1] 3238
Proces jest w tle i gdy chcę do niego powrócić, nie ma problemu: używam polecenia fg %numer_procesu_lokalnego, czyli w tym przypadku jakbym chciał przywrócić gedita to byłaby to jedynka '1'.
Problem mój zaczyna się w momencie, gdy zamknę proces terminala, który powołał proces programu znajdującego się akurat w tle, lub chciałbym się odwołać do tego procesu w tle z innego terminala - najzwyczajniej w świecie nie jest on widoczny. Próbowałem listować z (nazwijmy to) kolejnych terminal poleceniem jobs -l jednak nie zwracał żadnych rezulatów. Proces jest widoczny w liście procesów (ps -aux) i wygląda na to, że ma się całkiem dobrze. I teraz nasuwa mi się pytanie.
Czy jest możliwość przenieść proces na pierwszy plan do terminala z którego nie został on powołany? Nie wiem czy tutaj nie działa coś w stylu dziedziczenia, że proces gedita którego powołałem jest podprocesem powiedzmy terminala nr1 i dlatego nr2 nie ma do niego dostępu. Czy jak to jest?
Cowięcej, wydaje mi się, że można to osiągnąć, a tłumaczyłem sobie to w sposób taki, że skoro mamy serwery pracujące 24/7 i można się połączyć z nimi za pomocą SSH z komputera klienckiego i powoływać procesy w tle, to bezsensem byłby brak możliwości przeniesienia spowrotem na pierwszy plan procesu - gdyby tak było, trzebabyłoby trzymać cały czas sesję połączenia podczas którego został ten proces powołany, a po to jest serwer, żeby klientem od czasu do czasu zajrzeć tam i poszperać w nim. Takie moje dziwne rozumowanie.
Suma sumarum, czy nie dałoby się tego jakoś zrobić odwołując się do PIDa? Skoro można wysyłać sygnały do procesów za pomocą kill'a to czemu nie można byłoby czegoś takiego osiągnąć?
z góry dzięki za pomoc.
pozdrowienia
Offline
Uruchom taki proces/aplikacje w screenie.
Offline
Użyj screen-a. Procesy uruchomione w tle trafiają chyba jedynie do listy zadań bieżącego zadania, więc z nowym terminalem dostaniesz nową pustą listę.
Offline
Każdy proces (oprócz init) posiada oprócz swojego PID-a PPID (czyli PID rodzica)
Jeżeli więc wywołasz proces:
tk@kubuntu:~$ kate & [1] 9435
to proces ten otrzymuje PID-a 9435 i posiada taki sam PPID jak PID procesu go wywołującego.
czyli
tk@kubuntu:~$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 9192 7374 0 80 0 - 2537 wait pts/2 00:00:00 bash 0 S 1000 9435 9192 0 80 0 - 32762 poll_s pts/2 00:00:00 kate 0 R 1000 9516 9192 1 80 0 - 1436 - pts/2 00:00:00 ps
rodzicem procesu kate jest powłoka bash.
PPID procesu czeka aż proces PID przekaże odpowiedni kod wyjścia i przez to zwalnia pamięći proces jest poprawnie zamykany.
Ale jeśli zabijesz PID-a rodzica wtedy:
tk@kubuntu:~$ kill -9 9192
tk@kubuntu:~$ ps axl |grep kate 0 1000 9435 1 20 0 128824 41276 poll_s Sl ? 0:00 kate 0 1000 10794 7377 20 0 5436 768 pipe_w S+ pts/1 0:00 grep --color=auto kate
Proces osierocony jest adoptowany przez inita.
Offline
dzięki wielkie za podpowiedź z tym screenem, działa jak trzeba. Czyli jednak innej drogi niż przez screen podtrzymujący procesy nie ma?
Ok, rozumiem z tym ID procesu i id rodzica. A to "id" z listingu polecenia "jobs" to co to jest właściwie? Jakiś numer ID procesu na bieżącą sesję?
Offline
zadania powiązane z bieżącą powłoką. Jak otworzysz sobie drugą zakładkę konsoli i wykonasz jobs to tych zadań już nie ma
Offline
pkill kate
yampress@debian:~$ whatis pkill
pkill (1) - look up or signal processes based on name and other at...
Offline