Nowe posty

xx Odpowiednie wykorzystanie rdzeni P i E procesora (0)
Wczoraj o 17:52:01
xx Samba DC/AD problem z DNS (0)
2024-07-25, 12:42:23
xx DNS i WWW na virtualbox (4)
2024-07-24, 10:30:38
xx Instalacja Manjaro Linux (11)
2024-07-13, 22:57:31
xx Linux Lite 6.6. Po uruchomieniu z DVD przeglądarka Chrome jest nieaktywna (12)
2024-07-10, 22:33:30
xx Laptop MSI CR500 - nie akceptuje linuksa (6)
2024-07-03, 05:30:18
xx Co to jest ? (3)
2024-07-02, 13:36:58
xx Nowa wersja libreoffice (1)
2024-06-30, 18:22:49
xx Dystrybucja - środowisko graficzna dla amigowca (MUI) (4)
2024-06-30, 12:14:25
xx Jaki kod błędu zwracać z kernela? (3)
2024-06-09, 12:29:22

Autor Wątek: bash - skrypt jako jeden proces  (Przeczytany 1859 razy)

msz

  • Gość
bash - skrypt jako jeden proces
« dnia: 2014-09-07, 13:21:26 »
witam,

powiedzmy mam skrypt:

#skrypt:
#!/bin/bash

ping wp.pl


# odpalam w tle:
~# nohup ./skrypt >& /dev/null &
[2] 30103

i od razu robi mi drugi proces 30104 własnie z polecenim ping wp.pl

jak zrobić żeby polecenia systemowe zawarte w skrypcie były pod jednym procesem.

pozdrawiam

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
bash - skrypt jako jeden proces
« Odpowiedź #1 dnia: 2014-09-07, 13:33:24 »
Nie ma takiej możliwości, ani w Bashu/shellu, ani nawet programując natywnie.

Shell tworzy po prostu nowe procesy dla każdego wykonywanego polecenia, co można nawet łatwo sprawdzić zmienną $?, która dostaje PIDa każdego stworzonego procesu.

Natywnie możesz użyć exec(3), który podmieni aktualny proces na nowy, z tym samym PIDem. Ale poprzedni program przepadnie.

msz

  • Gość
bash - skrypt jako jeden proces
« Odpowiedź #2 dnia: 2014-09-07, 13:51:11 »
oki

dzieki za info

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3076
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
bash - skrypt jako jeden proces
« Odpowiedź #3 dnia: 2014-09-08, 11:30:31 »
Z tym "Nie ma takiej możliwości" to ostrożnie...

#!/bin/bash

exec ping wp.pl
echo "To sie nigdy nie wykona, bo exec nie wraca"
Polecenie exec powoduje, że jego argument zastępuje bash-a (coś jak goto vs call) . Jak polecenie z exec się skończy, to nie wraca do basha (bo jego już nie ma) tylko do procesu, który bash-a wywołał.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy