Buenas, El comando integrado (builtin) exec de bash, según ma bash(1): exec [-cl] [-a name] [command [arguments]] If command is specified, it replaces the shell. No new process is created. The arguments become the arguments to command. If the -l option is supplied, the shell places a dash at the beginning of the zeroth arg passed to command. This is what login(1) does. The -c option causes command to be executed with an empty environment. If -a is supplied, the shell passes name as the zeroth argument to the executed command. If command cannot be executed for some reason, a non-interactive shell exits, unless the shell option execfail is enabled, in which case it returns failure. An interactive shell returns failure if the file cannot be executed. If command is not specified, any redirections take effect in the current shell, and the return status is 0. If there is a redirection error, the return status is 1. Ok, pues lo que hace es no crear un nuevo subproceso (que es lo que hace normalmente bash el recibir un comando) sino substituir el proceso actual por el comando pasado. Lo he comprobado con cuatro chorradas y pstree y efectivamente, lo qué hace está claro. Ahora bien... ¿para qué sirve? Evidentemente tiene que tener alguna utilidad, sino no estaría, pero no lo veo. Gracias. -- Salut, Jordi Espasa
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2006-04-16 a las 19:32 +0200, Jordi Espasa Clofent escribió: ...
Ok, pues lo que hace es no crear un nuevo subproceso (que es lo que hace normalmente bash el recibir un comando) sino substituir el proceso actual por el comando pasado. Lo he comprobado con cuatro chorradas y pstree y efectivamente, lo qué hace está claro.
Ahora bien...
¿para qué sirve?
Evidentemente tiene que tener alguna utilidad, sino no estaría, pero no lo veo.
Por ejemplo, no dejar colgando una inútil sesión bash al ejecutar un programa. - -- Saludos Carlos Robinson -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) Comment: Made with pgp4pine 1.76 iD8DBQFEQs4htTMYHG2NR9URArKGAKCVYVCOunbtIXqOPk+z6NsSdNstLQCfcQfd e4YpPgPePWmw3MAH0qVMXDs= =Aab8 -----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2006-04-18 a las 16:48 +0200, Jordi Espasa Clofent escribió:
Por ejemplo, no dejar colgando una inútil sesión bash al ejecutar un programa.
Mmmmmm... hoy estoy espeso. Ponme un ejemplo, please.
No tengo uno a mano. Per en fin, en un script llamas a otro programa; pues bien, en memoria queda el bash con tu script, y colgando de él, el programa que ha llamado. Con exec el bash desaparecería de la memoria, porque es inutil que siga si tu script realmente ya terminó su tarea util. Tengo que experimentar yo con eso también, porque me sospecho que una consecuencia es no poder volver al script, terminó. - -- Saludos Carlos Robinson -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) Comment: Made with pgp4pine 1.76 iD8DBQFERP+otTMYHG2NR9URArnIAJ9hutU4DegKxUarXnHGuv0MCT/drQCfca8i VlCd7Ek8DtpYNxGGHCJpJSU= =zoxJ -----END PGP SIGNATURE-----
On 4/18/06, Jordi Espasa Clofent
Por ejemplo, no dejar colgando una inútil sesión bash al ejecutar un programa.
Mmmmmm... hoy estoy espeso. Ponme un ejemplo, please.
/*Repito un mail de otra lista que preguntaron lo mismo Lista del GRULIC*/ esto tiene que ver con que si lanzás un programa desde un script bash, se crea un proceso nuevo hijo del bash que está interpretando el script. basicamente quedan los dos corriendo. claro que el script en bash está `de más´, ocupando recursos al pedo (salvo que tengas que hacer un cleanup después de correr tu programa). exec en cambio *reemplaza8 el proceso que corre el script pot el programa que vos querés, dejando finalmente sólo un proceso (el nuevo) corriendo. estas cosas las podés ver si ejecutás estes script (long line following): --- cut here --- #! /bin/bash firefox & read # acá se queda esperando que uno apriete enter # ir a potra consola y ver la salida de `ps fux´ # se ven unas líneas como: # sferro 3632 0.0 0.8 5000 2132 ttyp3 Ss Apr07 0:00 | \_ /bin/bash # sferro 14186 47.0 9.4 63136 23404 ttyp3 Rl 14:07 0:01 | \_ /usr/lib/mozilla-firefox/firefox-bin -a firefox # cerrar el ffox y darle enter exec firefox --- cut here --- volver a correr el ps fux. notar que el bash padre ya no está.
participants (3)
-
Carlos E. R.
-
Jordi Espasa Clofent
-
Sebastian Ferro