Произвольно запускать и останавливать процесс [дубликат]

Hay muchos factores a considerar aquí. Tome esta respuesta con leve grano de sal ya que estoy escribiendo todos estos detalles de memoria. (Y, por favor, corrígeme a través de ediciones o comentarios si detectas algún error.)

Si pone en segundo plano un comando con &y luego el shell principal sale normalmente, el comando en segundo plano seguirá ejecutándose.

Sin embargo, si está ejecutando de forma interactiva, el comando "en segundo plano" se bloqueará cuando intente leer o escribir en la terminal. (Esto se aplica ya sea que el shell principal aún se esté ejecutando o no. )Si se redirigen stdout, stdin y stderr, esto no importará.

Si pone en segundo plano un comando y luego, p. su sesión SSH está desconectada, puede esperar que el comando en segundo plano finalice. Creo que esto se debe a que su shell enviará SIGHUP a todos sus procesos secundarios, pero no estoy 100% seguro de los detalles de eso.

Si rechaza un trabajo (con bash incorporadodisown)después de ponerlo en segundo plano, entonces no se cancelará solo porque, p. su sesión SSH finaliza. Sin embargo,el aspecto de ser bloqueado al intentar escribir en la terminal o leer desde la terminal aún se aplica (para sesiones interactivas ).

La ​​forma más general que conozco para iniciar un script o proceso secundario -en segundo plano de modo que no se vea afectado sin importar lo que le suceda al shell que lo genera (e independientemente de si se está iniciando interactivamente o desde un script ), es:

nohup somecommand >/dev/null 2>&1 </dev/null &

Esto supone que no le importa NINGUNA salida del comando a su salida estándar o error estándar, y no necesita alimentarlo con ninguna entrada estándar.

Si está satisfecho con que el script secundario -herede los descriptores de archivo de su principal (, es decir, la terminal no es un problema o tiene alguna otra solución ), entonces realmente todo lo que necesita debería ser:

./some-sub-script &
exit

Y solo un comentario al margen, si está escribiendo un daemon que está destinado a dejarse en ejecución, por favor(a )use registros y (b )tenga cuidado de rotar su registra limpiamente.

59
24.07.2012, 20:49
0 ответов

Теги

Похожие вопросы