Provided by: manpages-pl-dev_0.5-1_all bug

NAZWA

       execve - uruchomienie programu

SKŁADNIA

       #include <unistd.h>

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

OPIS

        Uwaga! To tłumaczenie może być nieaktualne!

       execve()  uruchamia  program  wskazany  przez  filename.   filename  musi być albo wykonywalnym programem
       binarnym, albo skryptem powłoki, rozpoczynającym się od linii postaci  "#!  interpreter  [arg]".   W  tym
       drugim  przypadku,  interpreter  musi  być  prawidłową  ścieżką  do programu, a nie skryptem, który byłby
       uruchomiany jako interpreter [arg] filename.

       argv jest tablicą łańcuchów przekazywanych jako argumenty nowego programu. envp  jest  tablicą  łańcuchów
       postaci  klucz=wartość,  która  jest przekazywana jako środowisko do nowego programu. Zarówno argv, jak i
       envp muszą być zakończone wskaźnikiem pustym (NULL).  Tablica argumentów oraz środowisko  są  dostępne  w
       funkcji  main  wywoływanego  programu, jeżeli jest ona zdefiniowana jako int main(int argc, char *argv[],
       char *envp[]).

       execve() nie powraca po pomyślnym wywołaniu, a segmenty  text,  data,  bss  oraz  segment  stosu  procesu
       wywołującego  zostają nadpisane przez odpowiedniki ładowanego programu. Wywoływany program dziedziczy PID
       procesu wywołującego i wszelkie deskryptory otwartych plików, które  nie  są  ustawione  jako  "close  on
       exec". Sygnały oczekujące na proces wywołujący zostają wyczyszczone.  Sygnałom, które były przechwytywane
       przez  proces  wywołujący, zostaje przypisana ich domyślna obsługa. Sygnał SIHCHLD (jeżeli jest ustawiony
       na SIG_IGN) może, ale nie musi być przestawiony na SIG_DFL.

       Jeśli obecny program jest ptrace'owany, wysyła się mu SIGTRAP po pomyślnym execve().

       Jeżeli plik programu wskazywany przez filename ma  ustawiony  bit  set-uid,  to  efektywny  identyfikator
       użytkownika procesu wywołującego jest ustawiany na właściciela pliku programu. Podobnie, jeżeli dla pliku
       programu  ustawiony  jest  bit  set-gid,  to efektywnemu identyfikatorowi grupy procesu wywołującego jest
       przypisywana grupa pliku programu.

       Jeśli program wykonywalny jest skonsolidowany dynamicznie w formacie a.out z bibliotekami dzielonymi,  na
       początku uruchamieina wywoływany jest konsolidator dynamiczny ld.so(8), który ładuje wszystkie biblioteki
       do rdzenia i konsoliduje z nimi program wykonywalny.

       Jeżeli  program  jest  skonsolidowany  dynamicznie  jako  ELF,  to  do  załadowania potrzebnych bibliotek
       współdzielonych używany  jest  interpreter  określony  w  segmencie  PT_INTERP.  Tym  interpreterem  jest
       zazwyczaj  /lib/ld-linux.so.1,  w  wypadku  programów skonsolidowanych z biblioteką libc w wersji 5, albo
       /lib/ld-linux.so.2 - dla programów skonsolidowanych z biblioteką GNU libc w wersji 2.

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu execve() nie wraca, w wypadku błędu zwracane jest  -1  i  odpowiednio  ustawiane
       errno .

BŁĘDY

       EACCES Plik lub interpreter skryptu nie jest zwykłym plikiem.

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

       EACCES System plików jest zamontowany jako noexec.

       EPERM  System  plików  jest  zamontowany  jako  nosuid, użytkownik nie jest superużytkownikiem, a plik ma
              ustawiony bit SUID lub SGID.

       EPERM  Proces jest śledzony (trace), użytkownik nie jest superużytkownikiem, a plik ma ustawiony bit SUID
              lub SGID.

       E2BIG  Lista argumentów jest zbyt długa.

       ENOEXEC
              Nie rozpoznano formatu pliku binarnego, plik ten jest skompilowany  dla  innej  architektury  albo
              wystąpił jakiś inny błąd w formacie, który powoduje, że program nie może być uruchomiony.

       EFAULT filename wskazuje poza dostępną dla użytkownika przestrzeń adresową.

       ENAMETOOLONG
              filename jest zbyt długie.

       ENOENT Plik  filename,  skrypt,  lub  intepreter  ELF  nie  istnieje  albo  nie  można znaleźć biblioteki
              współdzielonej potrzebnej do uruchomienia pliku lub interpretera.

       ENOMEM Brak dostępnej pamięci jądra.

       ENOTDIR
              Składnik ścieżki filename, ścieżki skryptu lub ścieżki interpretera ELF nie jest katalogiem.

       EACCES Brak praw do przeszukiwania dla składnika ścieżki filename lub ścieżki interpretera skryptu.

       ELOOP  Podczas rozwiązywania filename, nazwy skryptu lub interpretera ELF napotkano zbyt  wiele  dowiązań
              symbolicznych.

       ETXTBSY
              Plik wykonywalny był otwarty do zapisu przez jeden lub więcej procesów.

       EIO    Wystąpił błąd wejścia-wyjścia.

       ENFILE Został osiągnięte ograniczenie liczby otwartych plików w systemie.

       EMFILE Proces osiągnął już maksymalną liczbę otwartych plików.

       EINVAL Plik  wykonywalny  w  formacie ELF ma więcej niż jeden segment PT_INTERP (tzn. ma więcej niż jeden
              interpreter).

       EISDIR Intepreter ELF jest katalogiem.

       ELIBBAD
              Nie został 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  błędy  EAGAIN,  EINTR,  ELIBACC, ENOLINK, EMULTIHOP; POSIX nie dokumentuje błędów
       ETXTBSY, EPERM, EFAULT, ELOOP, EIO, ENFILE, EMFILE, EINVAL, EISDIR i ELIBBAD.

UWAGI

       Procesy ustawiające SUID lub SGID nie mogą być traktowane ptrace().

       Linux ignoruje bity SUID i SGID dla skryptów.

       Efect zamontowania systemu plików nosuid jest różny dla różnych wersji jądra  Linuksa:  niektóre  odmówią
       uruchomienia  programów SUID/SGID, gdy spowodowałoby to udostępnienie użytkownikowi możliwości, którymi w
       danym momencie nie dysponuje (i zwrócą EPERM), inne po prostu zignorują bity SUID/SGID  i  wykonają  exec
       pomyślnie.

       Maksymalna długość pierwszej linii skryptu powłoki, zawierającej #! wynosi 127 znaków.

ZOBACZ TAKŻE

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

INFORMACJE O TŁUMACZENIU

       Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne.
       W  razie  zauważenia  różnic  między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
       funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 2 execve

       Prosimy  o  pomoc  w  aktualizacji  stron  man  -   więcej   informacji   można   znaleźć   pod   adresem
       http://sourceforge.net/projects/manpages-pl/.

Linux 2.0.30                                       1997-09-03                                          EXECVE(2)