Nowe posty

xx Problem ze sterownikami. (5)
Wczoraj o 21:25:16
xx Instalacja xfce4 (2)
Wczoraj o 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

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