Nowe posty

Autor Wątek: bash - skrypt jako jeden proces  (Przeczytany 1847 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: 3069
  • 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