Repository 32bit  Forum
Repository 64bit  Wiki

Dubbio teorico su shell

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Dubbio teorico su shell

Messaggioda afterjames » mer feb 20, 2008 13:05

Salve a tutti e grazie in anticipo a quanti sapranno aiutarmi.Sto entrando con molta fatica nel mondo linux, ed ho un dubbio sulla shell.So che è un'interprete di comandi e bla bla bla.Mi interessa sapere qualcosa in più.Ora una shell dovrebbe essere qualcosa di questo tipo se non erro:
Codice: Seleziona tutto
//shell padre
char comando[256];
int status;
while(1){
    scanf("%s",comando);
    if (strcmp(comando,"exit");  //se digito exit esco
       break;
    pid_t pid = fork();
    if (pid==0){ //sono nel figlio
       execvp(comando,NULL);            //nel caso non vi siano parametri       
    }
    else
          wait(&status);
}
exit(0);


E fin qui mi è chiaro..Per ogni nuovo comando creo un nuovo processo shell che si occuperà di lanciarlo(senza creare un nuovo processo,con la chiamata execvp) e pongo il padre in attesa della terminazione.Il mio dubbio è questo:questo schema è valido per tutti gli eseguibili lanciati da shell?
Cioè se il comando fosse un mio banale programma c opportunamente compilato, la shell fa le stesse cose?Ed ancora..Questo schema è valido anche per i comandi interni?Grazie
afterjames
Linux 1.0
Linux 1.0
 
Messaggi: 64
Iscritto il: lun gen 14, 2008 14:14

Re: Dubbio teorico su shell

Messaggioda Paoletta » gio feb 21, 2008 11:32

afterjames ha scritto:Cioè se il comando fosse un mio banale programma c opportunamente compilato, la shell fa le stesse cose?

yes; i programmi come "ls" sono programmi c!
afterjames ha scritto:Ed ancora..Questo schema è valido anche per i comandi interni?Grazie

no, li esegue al volo
Avatar utente
Paoletta
Staff
Staff
 
Messaggi: 3910
Iscritto il: dom apr 24, 2005 23:00
Località: Varese
Slackware: 13.1
Desktop: fluxbox

Re: Dubbio teorico su shell

Messaggioda afterjames » gio feb 21, 2008 11:52

Esegue "al volo" in che senso?
afterjames
Linux 1.0
Linux 1.0
 
Messaggi: 64
Iscritto il: lun gen 14, 2008 14:14

Re: Dubbio teorico su shell

Messaggioda FireEater » gio feb 21, 2008 16:08

afterjames ha scritto:Esegue "al volo" in che senso?


I comandi della shell sono gestiti dal codice stesso della shell, quindi fa tutto padre senza generare nuovi processi.

Per esempio quando assegni una variabile o esegui istruzioni.

O tu per comandi interni intendi altro? :-k
Avatar utente
FireEater
Linux 2.6
Linux 2.6
 
Messaggi: 508
Iscritto il: sab feb 05, 2005 0:00
Località: Cagliari <---> Torino
Nome Cognome: Giuseppe M.
Slackware: Current
Kernel: 2.6.32.7-smp
Desktop: kde 4.3.4

Re: Dubbio teorico su shell

Messaggioda Blizzard » gio feb 21, 2008 17:49

ciao!
qualcuno si ricorda di me??? :D (scherzo.... effettivamente è un bel po che non mi loggo)

se vuoi sapere qualcosa in più su shell e quant'altro ti consiglio di leggere qualcosa sulla programmazione di sistema linux.
Penso che per cominciare vada più che bene qualche slide di un generico corso di Laboratorio di Sistemi Operativi scaricata dai siti universitari.
Poi c'è un ottimo libro pdf gratuito che è Guida alla Programmazione in Linux, li potrai vedere in dettaglio i meccanismi di gestione dei processi, comunicazione, redirezione e sincronizzazione.
Alcuni di questi compiti infatti sono gestiti dalle shell che non hanno la semplice funzionalità di forkare processi ;)

Per precisare poi sullo strano meccanismo di fork in due parole posso dirti che in un sistema unix, l'unico modo per avere un processo è creare una copia di uno esistente.
Pertanto anche quando vuoi lanciare un programma... che sia ls o helloworld.out devi necessariamente creare una copia di un processo (con una fork) in modo da avere un processo figlio con la copia dell'ambiente del padre (descrittori dei files, prossima istruzione, ecc...) e poi tutto questo ambiente viene completamente rimpiazzato con una chiamata exec dal nuovo programma.
Nulla infatti ti vieta di usare exec senza fork.... ma poi quando termina il programma una cosa è certa.... non ti ritorna alla shell :P

ciao
Gio
Avatar utente
Blizzard
Master
Master
 
Messaggi: 1509
Iscritto il: mar gen 02, 2007 22:53
Nome Cognome: Giovanni Santostefano
Slackware: 12.2
Kernel: 2.6.27.7-smp
Desktop: Fluxbox

Re: Dubbio teorico su shell

Messaggioda afterjames » gio feb 21, 2008 18:24

Grazie a tutti..Io per comandi interni intendo proprio quelli della shell..Quindi se non lancia un nuovo processo è come se eseguisse una funzione.Il resto è tutto chiaro.
afterjames
Linux 1.0
Linux 1.0
 
Messaggi: 64
Iscritto il: lun gen 14, 2008 14:14

Re: Dubbio teorico su shell

Messaggioda Paoletta » gio feb 21, 2008 22:06

Quindi se non lancia un nuovo processo è come se eseguisse una funzione.


sì, è così;
Avatar utente
Paoletta
Staff
Staff
 
Messaggi: 3910
Iscritto il: dom apr 24, 2005 23:00
Località: Varese
Slackware: 13.1
Desktop: fluxbox


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite