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/.