Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       execve - uruchomienie programu

SK/LADNIA

       #include <unistd.h>

       int  execve(const  char  *filename,  char  *const  argv [], char *const
       envp[]);

OPIS

       execve() uruchamia program wskazany przez filename.  filename  musi  by
       albo   wykonywalnym   programem   binarnym,   albo   skryptem  powloki,
       rozpoczynajcym si od linii  postaci  "#!  interpreter  [arg]".   W  tym
       drugim przypadku, interpreter musi by prawidlow ciek do programu, a nie
       skryptem, ktory bylby uruchomiany jako interpreter [arg] filename.

       argv  jest  tablic  lacuchow  przekazywanych  jako   argumenty   nowego
       programu.  envp  jest  tablic  lacuchow postaci klucz=warto, ktora jest
       przekazywana jako rodowisko do nowego programu.  Zarowno  argv,  jak  i
       envp  musz  by  zakoczone wskanikiem pustym (NULL).  Tablica argumentow
       oraz rodowisko s dostpne w funkcji main  wywolywanego  programu,  jeeli
       jest  ona  zdefiniowana  jako  int  main(int  argc,  char *argv[], char
       *envp[]).

       execve() nie powraca po pomylnym wywolaniu, a segmenty text, data,  bss
       oraz   segment   stosu   procesu  wywolujcego  zostaj  nadpisane  przez
       odpowiedniki ladowanego programu.  Wywolywany  program  dziedziczy  PID
       procesu  wywolujcego i wszelkie deskryptory otwartych plikow, ktore nie
       s ustawione jako "close on exec". Sygnaly oczekujce na proces wywolujcy
       zostaj  wyczyszczone.  Sygnalom, ktore byly przechwytywane przez proces
       wywolujcy, zostaje  przypisana  ich  domylna  obsluga.  Sygnal  SIHCHLD
       (jeeli  jest ustawiony na SIG_IGN) moe, ale nie musi by przestawiony na
       SIG_DFL.

       Jeli obecny program jest ptrace'owany, wysyla si mu SIGTRAP po pomylnym
       execve().

       Jeeli plik programu wskazywany przez filename ma ustawiony bit set-uid,
       to  efektywny  identyfikator  uytkownika   procesu   wywolujcego   jest
       ustawiany  na  wlaciciela  pliku  programu.  Podobnie,  jeeli dla pliku
       programu ustawiony jest bit set-gid,  to  efektywnemu  identyfikatorowi
       grupy procesu wywolujcego jest przypisywana grupa pliku programu.

       Jeli  program  wykonywalny  jest  skonsolidowany dynamicznie w formacie
       a.out z bibliotekami dzielonymi,  na  pocztku  uruchamieina  wywolywany
       jest   konsolidator   dynamiczny   ld.so(8),   ktory  laduje  wszystkie
       biblioteki do rdzenia i konsoliduje z nimi program wykonywalny.

       Jeeli  program  jest  skonsolidowany  dynamicznie  jako  ELF,   to   do
       zaladowania   potrzebnych   bibliotek   wspoldzielonych   uywany   jest
       interpreter okrelony w  segmencie  PT_INTERP.  Tym  interpreterem  jest
       zazwyczaj  /lib/ld-linux.so.1,  w  wypadku programow skonsolidowanych z
       bibliotek libc w wersji 5,  albo  /lib/ld-linux.so.2  -  dla  programow
       skonsolidowanych z bibliotek GNU libc w wersji 2.

WARTO ZWRACANA

       Po pomylnym zakoczeniu execve() nie wraca, w wypadku bldu zwracane jest
       -1 i odpowiednio ustawiane errno .

B/LDY

       EACCES Plik lub interpreter skryptu nie jest zwyklym plikiem.

       EACCES Brak praw wykonywania dla pliku, skryptu lub intepretera ELF.

       EACCES System plikow jest zamontowany jako noexec.

       EPERM  System plikow jest zamontowany jako nosuid, uytkownik  nie  jest
              superuytkownikiem, a plik ma ustawiony bit SUID lub SGID.

       EPERM  Proces    jest    ledzony    (trace),    uytkownik    nie   jest
              superuytkownikiem, a plik ma ustawiony bit SUID lub SGID.

       E2BIG  Lista argumentow jest zbyt dluga.

       ENOEXEC
              Nie  rozpoznano  formatu  pliku   binarnego,   plik   ten   jest
              skompilowany dla innej architektury albo wystpil jaki inny bld w
              formacie, ktory powoduje, e program nie moe by uruchomiony.

       EFAULT filename wskazuje poza dostpn dla uytkownika przestrze adresow.

       ENAMETOOLONG
              filename jest zbyt dlugie.

       ENOENT Plik filename, skrypt, lub intepreter ELF nie istnieje albo  nie
              mona  znale biblioteki wspoldzielonej potrzebnej do uruchomienia
              pliku lub interpretera.

       ENOMEM Brak dostpnej pamici jdra.

       ENOTDIR
              Skladnik cieki filename, cieki skryptu  lub  cieki  interpretera
              ELF nie jest katalogiem.

       EACCES Brak  praw  do  przeszukiwania  dla skladnika cieki filename lub
              cieki interpretera skryptu.

       ELOOP  Podczas rozwizywania filename, nazwy  skryptu  lub  interpretera
              ELF napotkano zbyt wiele dowiza symbolicznych.

       ETXTBSY
              Plik  wykonywalny  byl  otwarty  do zapisu przez jeden lub wicej
              procesow.

       EIO    Wystpil bld wejcia-wyjcia.

       ENFILE Zostal osignite ograniczenie liczby otwartych plikow w systemie.

       EMFILE Proces osignl ju maksymaln liczb otwartych plikow.

       EINVAL Plik wykonywalny w  formacie  ELF  ma  wicej  ni  jeden  segment
              PT_INTERP (tzn. ma wicej ni jeden interpreter).

       EISDIR Intepreter ELF jest katalogiem.

       ELIBBAD
              Nie zostal rozpoznany format intepretera ELF.

ZGODNE Z

       SVr4,  SVID, X/OPEN, BSD 4.3. POSIX nie dokumentuje zachowania #!, lecz
       poza tym jest zgodny. SVr4 dokumentuje dodatkowe  bldy  EAGAIN,  EINTR,
       ELIBACC,  ENOLINK,  EMULTIHOP;  POSIX  nie  dokumentuje  bldow ETXTBSY,
       EPERM, EFAULT, ELOOP, EIO, ENFILE, EMFILE, EINVAL, EISDIR i ELIBBAD.

UWAGI

       Procesy ustawiajce SUID lub SGID nie mog by traktowane ptrace().

       Linux ignoruje bity SUID i SGID dla skryptow.

       Efect zamontowania systemu plikow nosuid jest rony  dla  ronych  wersji
       jdra  Linuksa:  niektore  odmowi  uruchomienia programow SUID/SGID, gdy
       spowodowaloby to udostpnienie uytkownikowi moliwoci,  ktorymi  w  danym
       momencie  nie  dysponuje  (i zwroc EPERM), inne po prostu zignoruj bity
       SUID/SGID i wykonaj exec pomylnie.

       Maksymalna dlugo pierwszej linii skryptu powloki, zawierajcej #! wynosi
       127 znakow.

ZOBACZ TAKE

       chmod(2), fork(2), execl(3), environ(5), ld.so(8)

INFORMACJE O T/LUMACZENIU

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.