|
���
execl, execv, execle, execve, execlp, execvp - ���o��e��e
�a��a
���������
int execl (path, arg0, arg1, ..., argn, (char*)0) char *path, *arg0, *arg1, ..., *argn; int execv (path, argv) char *path, *argv[]; int execle (path, arg0, arg1, ..., argn, (char*)0, envp) char *path, *arg0, *arg1,..., *argn, *envp[]; int execve (path, argv, envp) char *path, *argv[], *envp[]; int execlp (file, arg0, arg1, ..., argn, (char*)0) char *file, *arg0, *arg1,..., *argn; int execvp (file, argv) char *file, *argv[];
��������
�y����� ce�e�c��a exec �a�e���� �e�y��� o�pa� �po�ecca �o���
o�pa�o�. Ho��� o�pa� ����e�ae�c� �� o��e���o�o �a��a,
�a���ae�o�o �a��o� o�pa�a �po�ecca. �oc�e yc�e��o�o
���o��e��� ���o�a exec �e�o��o�e� �o��pa� � c�ap�� o�pa�
�po�ecca, �oc�o���y o� �epe�p�� �o��� o�pa�o�.
Ap�y�e�� path �a�ae� ��� �a��a, co�ep�a�e�o �o��� o�pa� �po�ecca.
Ap�y�e�� file �a��e �a�ae� ��� �a��a, co�ep�a�e�o �o��� o�pa� �po�ecca. Ec�� ap�y�e�� file �e co�ep��� c���o� /, �pe���c ��e�� ��o�o �a��a �o�y�ae�c� �oc�e�o�a�e���o� �o�c�a�o��o� ��e� �a�a�o�o�, y�a�a���x � ��a�e��� �epe�e��o� PATH (c�. environ(7)). Ko�a���a� cpe�a �op��pye�c� ���ep�pe�a�opo� �o�a�� (c�. sh(1)).
Ap�y�e��� arg0, arg1, ..., argn ������c� y�a�a�e���� �a c�po�� c���o�o�, �a�ep�ae��e c���o�o� NUL. C�po�� �pe�c�a����� co�o� c��co� ap�y�e��o�, �epe�a�ae��x �o�o�y o�pa�y �po�ecca. Ap�y�e�� arg0 �o��e� �p�cy�c��o�a�� �ce��a � �o��e� y�a���a�� �a c�po�y, ���o co��a�a��y� c path, ���o co�ep�a�y� �oc�e���� �o��o�e�� path.
Ap�y�e�� argv ����e�c� �acc��o� y�a�a�e�e� �a c���o����e c�po��, �a�ep�ae��e c���o�o� NUL. C�po�� �pe�c�a����� co�o� c��co� ap�y�e��o�, �epe�a�ae��x �o�o�y o�pa�y �po�ecca. Ap�y�e�� argv[0] �o��e� �p�cy�c��o�a�� �ce��a � �o��e� y�a���a�� �a c�po�y, ���o co��a�a��y� c path, ���o co�ep�a�y� �oc�e���� �o��o�e�� path.
Ap�y�e�� envp ����e�c� �acc��o� y�a�a�e�e� �a c���o����e c�po��, �a�ep�ae��e c���o�o� NUL. C�po�� �pe�c�a����� co�o� �o�a���y� cpe�y ��� �o�o�o o�pa�a �po�ecca. �oc�e���� ��e�e�� �acc��a �o��e� ���� �y�e��� y�a�a�e�e�.
�a���, o��p���e c�ap�� (�����a����) o�pa�o� �po�ecca, oc�a��c� o��p����� � � �o�o� o�pa�e �a �c����e��e� �ex, y �o�op�x ��a� �a�p���� �p� exec pa�e� 1; (c�. fcntl(3)). ��a�a�e�� �o����� � �ex �a��ax, ��o oc�a��c� o��p�����, �e ���e��e�c�.
C���a��, �a �o�op�e � c�apo� o�pa�e �po�ecca ���a yc�a�o��e�a c�a��ap��a� pea���� (SIG_DFL) ��� ���op�po�a��e (SIG_IGN), oc�a��c� �a���� �e � �o�o� o�pa�e. Ha c���a��, �o�op�e � c�apo� o�pa�e ���� o�����e�� �epex�a���ae����, � �o�o� o�pa�e yc�a�a����ae�c� c�a��ap��a� pea���� c�c�e�� (c�. signal(3)).
Ec�� ��� yc�a�o��� �o���o�a�e��c�o�o ID y �a��a o�pa�a �po�ecca pa�e� 1 (c�. chmod(2)), ���e������� �o���o�a�e��c��� ID �po�ecca c �o��� o�pa�o� �o�a�ae�c� pa���� �o���o�a�e��c�o�y ID �a��a. A�a�o����o, ec�� ��� yc�a�o��� �py��o�o�o ID y �a��a o�pa�a �po�ecca pa�e� 1, ���e������� �py��o�o� ID �po�ecca c �o��� o�pa�o� �o�a�ae�c� pa���� �py��o�o�y ID �a��a. Pea����e �o���o�a�e��c��� � �py��o�o� IDs �po�ecca oc�a��c� �e���e�����.
�po����po�a��e �oc�e exec �a�pe�e�o (c�. profil(2)).
Ho��� o�pa� �po�ecca �ac�e�ye� o� c�apo�o o�pa�a �o �pa��e� �epe, c�e�y���e a�p��y��:
�o���o�a�e��c�y� �o�a��y � �p�op��e�y �po�ecca (c�. nice(2)) ID �po�ecca ID �po�ecca-o��a ID �py��� �po�ecco� ��a�e��� ce�a�opo� (c�. semop(2)) ID �ep���a���o� �py��� (c�. exit(2) � signal(3)) ��a� �pacc�po��� (c�. ptrace(2), �a�poc 0) �a��ep �po�ecca (c�. alarm(2)) �e�y��� �a�a�o� �op�e�o� �a�a�o� �ac�y �o�a �a���� (c�. umask(2)) �a�c��a����� pa��ep �a��a (c�. ulimit(2)) tms_utime, tms_stime, tms_cutime, tms_cstime (c�. times(2)).
B �po�pa��ax �a ����e C� ��� pea���a��� ���o�a exec �o��o �o���o�a��c� �y������� execl � execv. �y����� execl �p��e��e�c� �o��a, �o��a ��� ���o���e�o�o �a��a � �epe�a�ae��e ap�y�e��� ���ec��� �apa�ee; o�� y�a���a��c� � ���e c���o����x c�po� - ap�y�e��o� �y�����. �o co��a�e���, �ep��� ap�y�e�� �o��e� co��a�a�� ���o c ��e�e� �a��a, ���o c �oc�e���� �o��o�e��o� ��o�o ��e��. �oc�e���� ap�y�e��o� � c��c�e �o��e� ���� �y�e�o� y�a�a�e��.
�y����� execv �p��e��e�c�, �o��a �apa�ee �e���ec��o ��c�o ap�y�e��o�. Ap�y�e��a�� � ��o� c�y�ae ������c� ��� �a��a � �acc�� c�po�, co�ep�a��x �epe�a�ae��e �a��y ap�y�e���. �oc�e���� ��e�e��o� �acc��a �o��e� ���� �y�e�o� y�a�a�e��.
�po�pa��a �a ����e C�, �o�y�a��a� y�pa��e��e � pe�y���a�e exec, �o���a ��e�� c�e�y���� o�pa�o� o��ca���� �xo�:
void main (argc, argv, envp) int argc; char **argv, **envp;��e argc - c�e���� ��c�a ap�y�e��o�;
argc �o��e� ����, �o �pa��e� �epe, �e �e���e 1 � argv[0] �o��e� co��a�a�� c ��e�e� ��� �oc�e���� �o��o�e��o� ��e�� �a��a.
argv �o�e� �e�ocpe�c��e��o �c�o���o�a��c� � �py�o� execv, �oc�o���y argv[argc] pa�e� 0.
Ka��a� c�po�a � �acc��e, y�a���ae�o� envp, coc�o�� �� ��e��, ��a�a "=" � ��a�e��� (c���o���o� c�po��, �a�ep�ae�o� c���o�o� NUL). Macc�� �a�ep�ae�c� �y�e��� y�a�a�e�e�. ���ep�pe�a�op �o�a�� sh(1) �epe�ae� �����ae�o� �po�pa��e � �a�ec��e �o�a���o� cpe�� ��e�a � ��a�e��� �o�a����x �epe�e���x, o�����e���x ��c�op��pye����. C��co� o����o ��c�op��pye��x ��e� c�. � environ(7). �p� ���o�e �po�pa��� ��a�e��e envp �p�c�a��ae�c� ��e��e� �epe�e��o� environ, �o�opa� �c�o���ye�c� execv � execl ��� �epe�a�� �o�a���o� cpe�� ���o� �o��po�pa��e �a��o� �po�pa���. �epe��c�e���e ���e �y����� ����� o�pa�o� �epe�a�� �o�a���y� cpe�y:
execle (file, arg0, arg1, ..., argn, 0, environ); execve (file, argv, environ);
execlp � execvp �����a��c� c �e�� �e ap�y�e��a��, ��o execl � execv, �o ��y� ��� �a��a, �poc�a�p��a� �a�a�o�� �a� �e, �a� sh(1). C��co� �a�a�o�o� �epe�c� �� �o�a���o� cpe��.
exec a�ap���o �a�ep�ae�c� � �o��pa�ae� y�pa��e��e � c�ap�� o�pa� �po�ecca, ec�� ���o���e�c� xo�� �� o��o �� c�e�y���x yc�o���:
[ENOENT] | Ko��o�e�� ��e�� �a��a o�pa�a �po�ecca �e cy�ec��ye�. |
---|---|
[ENOTDIR] | Ko��o�e�� �pe���ca ��e�� �a��a o�pa�a �po�ecca �e ����e�c� �a�a�o�o�. |
[EACCES] | ���o �e� pa�pe�e��� �a �o�c� � �a�a�o�e �� �pe���ca ��e�� �a��a o�pa�a �po�ecca. |
[EACCES] | �a�� o�pa�a �po�ecca �e ����e�c� o������. |
[EACCES] | He� pa�pe�e��� �a ���o��e��e �a��a o�pa�a �po�ecca. |
[ENOEXEC] | �a�� o�pa�a �po�ecca ��ee� pa�pe�e��e �a ���o��e��e, �o e�o �op�a� �e co��a�ae� c �op�a�o� o��e���o�o �a��a. |
[ETXTBSY] | Ho��� �a�� o�pa�a �po�ecca ����e�c� ��c�o� �po�e�ypo� (pa��e��e��� ce��e��o� ��c�py����), �o�op�� � �a���� �o�e�� o��p�� �a �a��c� �py��� �po�ecco�. |
[ENOMEM] | Ho��� o�pa� �po�ecca �pe�ye� �a���� �o���e, �e� e�y �o�e� ���� ���e�e�o � o�epa����o� �a���� ��� � o��ac�� c�o����a. |
[E2BIG] | ��c�o �a��o� � c��c�e ap�y�e���, �epe�a�ae��x �o�o�y o�pa�y, �pe���ae� �pe�yc�o�pe���� c�c�e�o� ����� � 512 �a��o�. |
[EFAULT] | ����a �o�o�o �a��a o�pa�a �e co��a�ae� c y�a�a��o� � �a�o�o��e. |
[EFAULT] | A�pec, �a�a���� path, argv ��� envp, ��xo��� �a �pe�e�� �o���o�a�e��c�o�o a�pec�o�o �poc�pa�c��a �po�ecca. |
BO��PA�AE�OE ��A�E��E
B c�y�ae yc�e��o�o �a�ep�e��� �e �po�cxo��� �o��pa�a
y�pa��e��� � ��a�e��� � c�ap�� o�pa� �po�ecca. ��a�e
y�pa��e��e �o��pa�ae�c� � c�ap�� o�pa�, �o��pa�ae�c�
��a�e��e -1 � � errno �a�oc��c� �o� o�����.
��. �����
exit(3), fork(3), proctl(3), semop(3)
���������
exec �o�e� a�ap���o �a�ep����c�, ec�� o��e� o�epa����o�
�a���� �pe���ae� pa��ep o��ac�� c�o����a (c�. ���e �o�
o����� ENOMEM). O��a�o, ��o o�pa���e��e c���ae�c�
�c�o���o�a��e� c�e�y���x �ap�a��o� ���o�a proctl(3):
PRHUGEX | �o��o��e� ���o����� �po�pa��y �a�e, ec�� ee pa��ep �pe���ae� pa��ep o��ac�� c�o����a. Ta��e �po�pa��� �o���� �o�e�a��c� � �oc�y��y� �ac�� o�epa����o� �a���� � ���e������� �o���o�a�e��c��� ID �po�ecca �o��e� ���� �p����e��po�a����. �po�ecc, ���o������� �po�pa��y �a�o�o pa��epa, ��o��pye�c� c�c�e�o� o� ���py��� � o��ac�� c�o����a. |
---|---|
PRNORMX | �a�pe�ae� �po�eccy ���o����� �po�pa��y �o�o��o�o pa��epa. ��o� ���o� �o�e� c�e�a�� ���o� �po�ecc. |
|