Nowe posty

Autor Wątek: Nauka BASH, Procesów, Wątków itd.  (Przeczytany 4421 razy)

Dregorio

  • Gość
Nauka BASH, Procesów, Wątków itd.
« dnia: 2013-12-19, 18:38:15 »
Witam, mój problem nie dotyczy tylko BASH, ale też i języka C, ale nie będę zakładał 2 wątków. Chciałbym podszkolić się w BASH, możecie polecić mi książki? Te materiały na internecie są jakieś 'słabe'. Chciałbym też nauczyć się o procesach, wątkach itd. możecie polecić mi jakieś materiały/książki?

BTW. jeśli mam program gdzie:

switch(fork())
case -1: perror
case 0: costam
default: fork(); fork();
.
.
.

to jak mam liczyć te forki?, jeśli to np. jest w pętli? Ile będzie procesów wraz z macierzystym?

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
Nauka BASH, Procesów, Wątków itd.
« Odpowiedź #1 dnia: 2013-12-19, 20:11:31 »
Nie wiem co masz na myśli pod pojęciem "słabe", większość poradników skierowana jest dla początkującyh, wiec nie ma co oczekiwać cudów. Może na początek to Cię zainteresuje --> http://www.tldp.org/LDP/abs/html/

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2481
  • 1709
    • Zobacz profil
Nauka BASH, Procesów, Wątków itd.
« Odpowiedź #2 dnia: 2013-12-19, 23:15:17 »
Ja dodam ogólne linki które są dostępne na ircu,
ogólne z google nie zawsze są polecane, bo mogą być nie aktualne.
Więcej nie pomogę bo się nie znam.

http://mywiki.wooledge.org/BashFAQ
http://mywiki.wooledge.org/BashGuide
http://www.gnu.org/software/bash/manual/bash.html
http://wiki.bash-hackers.org/doku.php
http://www.grymoire.com/Unix/Quote.html
http://www.shellcheck.net/
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

darkdancer

  • Gość
Nauka BASH, Procesów, Wątków itd.
« Odpowiedź #3 dnia: 2013-12-20, 11:20:57 »
Cytat: Dregorio
switch(fork())
case -1: perror
case 0: costam
default: fork(); fork();
Zakładając, że każda z operacji forkowania nie zwróci błędów to 5 (domyślam się, że jest break między poszczególnymi opcjami w switchu).
Małe wyjaśnienie:
1. Program trafia na switch wykonuje operację fork co daje dwa procesy i w każdym sprawdza wartość jaką zwróciła funkcja fork().
2. Dla procesu potomnego (dziecka) fork() zwraca 0, czyli wykonuje się "costam" (dalej zakładam, że jest tam break i program wychodzi z konstrukcji switch).
3. Dla procesu, który wywoływał funkcję fork() zwraca identyfikator procesu dziecka, czyli wykonuje się sekcja default, gdzie mamy znowu funkcję fork(), dając łącznie 3 procesy.
4. W dwóch procesach potomnych, które powstały po uruchomieniu sekcji default, jest kolejna funkcja fork(), po której wywołaniu powstają dwa nowe procesy, dając łącznie liczbę 5.