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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-03-21 12:47:56

  kuntaker - Nowy użytkownik

kuntaker
Nowy użytkownik
Zarejestrowany: 2012-03-16

procesy w tle

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]

Kod:

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

 

#2  2012-03-21 13:10:52

  ba10 - Członek DUG

ba10
Członek DUG
Skąd: jesteś ?
Zarejestrowany: 2006-03-07
Serwis

Re: procesy w tle

Uruchom taki proces/aplikacje w screenie.


"Jeżeli chcesz się nauczyć Linuksa, to pierwsze co musisz zrobić to odrzucić wszelkie przyzwyczajenia wyniesione z poprzedniego systemu. Twoja wiedza jest o tyle zgubna, że daje Ci poczucie że coś jednak wiesz — jednak w kontekście Linuksa prawdopodobnie nie wiesz jeszcze nic." Minio
Mój Blog, a później Tańczymy ;)

Offline

 

#3  2012-03-21 13:15:15

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: procesy w tle

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

 

#4  2012-03-21 19:16:26

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Re: procesy w tle

Każdy proces (oprócz init) posiada oprócz swojego PID-a PPID (czyli PID rodzica)
Jeżeli więc wywołasz proces:

Kod:

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

Kod:

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:

Kod:

tk@kubuntu:~$ kill -9 9192

Kod:

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

 

#5  2012-03-21 20:04:35

  kuntaker - Nowy użytkownik

kuntaker
Nowy użytkownik
Zarejestrowany: 2012-03-16

Re: procesy w tle

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

 

#6  2012-03-21 20:51:13

  hello_world - Członek DUG

hello_world
Członek DUG
Skąd: Rymanów Zdrój
Zarejestrowany: 2010-06-03
Serwis

Re: procesy w tle

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

 

#7  2012-03-22 07:48:45

  Yampress - Imperator

Yampress
Imperator
Zarejestrowany: 2007-10-18

Re: procesy w tle

Kod:

pkill kate

yampress@debian:~$ whatis pkill
pkill (1)            - look up or signal processes based on name and other at...

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)