Primero, ¿por qué debería ejecutarse el programa en segundo plano?
El programa que calculamos es muy largo, generalmente varias horas o incluso una semana. El entorno que utilizamos es conectarnos a un servidor Linux japonés de forma remota utilizando masilla. Por lo tanto, tener el programa ejecutado en segundo plano tiene los siguientes tres beneficios:
1: El hecho de que cerremos este lado no afecta al programa que se ejecuta en Japón.
(No como antes, cuando se desconecta nuestra red o cuando se apaga, el programa se interrumpirá o no podrá encontrar datos, el programa que se ejecuta durante unos días solo puede volver a aparecer, es muy molesto)
2 : No afecta la eficiencia del cálculo
2: después de que el programa se ejecuta en segundo plano, no ocupará el terminal, podemos usar el terminal para hacer otras cosas.
En segundo lugar, cómo hacer que el programa se ejecute en segundo plano
Hay muchos métodos, aquí se enumeran principalmente dos. Si tenemos el programa pso.cpp, después de compilar para generar el archivo ejecutable pso, queremos que el pso se ejecute en el fondo del servidor Linux. Cuando el cliente se apaga y luego vuelve a iniciar sesión en el servidor, continúa viendo los resultados de la salida que se emitió originalmente en el terminal.
(Suponiendo que todas las operaciones estén en el directorio actual)
Método 1 Ingrese el comando en el terminal:
# ./pso > pso.file 2 > &1 &
Explicación: PSO se coloca directamente en segundo plano, y la salida del terminal se almacena en el archivo pso.file en el directorio actual.
Cuando el cliente se apaga y vuelve a iniciar sesión en el servidor, puede ver directamente el archivo pso.file para ver el resultado de la ejecución (Orden de Vida
: #cat pso.file).
Método 2 Ingrese el comando en el terminal:
# nohup ./pso > pso.file 2 > &1 &
Explique: Nohup significa no colgar, coloque pso directamente en segundo plano y almacene la salida del terminal en el archivo pso.file en el directorio actual
. Después de que el cliente se apague y vuelva a iniciar sesión en el servidor, vea directamente el archivo pso.file
para ver el resultado de la ejecución (comando: #cat pso.file).
Tres, comandos comunes de administración de tareas
# trabajos //Ver tareas, devolver el número de tarea n y el número de proceso
# bg% n //se numerarán n tarea Ejecutar en segundo plano
# fg% n //Ejecutar la tarea numerada n en primer plano
# ctrl + z //suspender la tarea actual
# ctrl + c //Finalice la tarea actual
Nota: Si desea poner la tarea en ejecución en segundo plano el día anterior, primero use ctrl + z para suspender la tarea, luego use bg para hacer la ejecución posterior .
En Linux, si quieres Deje que el proceso se ejecute en segundo plano. En general, podemos agregar &después del comando. De hecho, esto coloca el comando en una cola de trabajos:
$ ./test.sh & [1] 17208 $ jobs -l [1] + 17208 Ejecutando ./test.sh &Para los comandos que se han ejecutado en primer plano, también puede volver a ejecutarlos en segundo plano. Primero presione ctrl + z para pausar el proceso en ejecución, luego Use el comando bg para poner el trabajo detenido en segundo plano:
$ ./test.sh [1] + Detenido ./test.sh $ bg% 1 [1] + ./test.sh &$ Jobs -l [1] + 22794 Ejecutando ./test.sh &Sin embargo, si el proceso se ejecuta desde arriba hacia el fondo, el proceso principal sigue siendo el proceso del shell de terminal actual, y una vez que el proceso principal finaliza, enviará una señal de suspensión a todos los procesos secundarios. El proceso hijo también se cerrará después de recibir el bloqueo. Si queremos continuar ejecutando el proceso mientras salimos del shell, debemos usar nohup para ignorar la señal de colgar, o setsid configurará el proceso primario al proceso de inicio (el número de proceso es 1)
$ echo $$ 21734 $ nohup. /test.sh &[1] 29016 $ ps -ef |
Prueba de Grep 515 29710 21734 0 11:47 pts /12 00:00:00 /bin /sh ./test.sh 515 29713 21734 0 11:47 pts /12 00:00:00 prueba de grep $ setsid ./test.sh &[1] 409 $ ps -ef |
Prueba de Grep 515 410 1 0 11:49? 00:00:00 /bin /sh ./test.sh 515 413 21734 0 11:49 pts /12 00:00:00 prueba de grep El experimento anterior demuestra el uso de nohup /setsid Agregue ¶ que el proceso se ejecute en segundo plano sin verse afectado por la salida del shell actual. Entonces, ¿qué pasa con un proceso que ya se está ejecutando en segundo plano? Puede usar el comando disown:
$ ./test.sh &[1] 2539 $ jobs -l [1] + 2539 Running ./test.sh &$ disown -h% 1 $ ps -ef |
Prueba de Grep 515 410 1 0 11:49? 00:00:00 /bin /sh ./test.sh 515 2542 21734 0 11:52 pts /12 00:00:00 prueba de grep Hay otra manera, incluso si el proceso Ejecutado en una subshell, de hecho, esto es lo mismo que setsid. El método es simple, encierre el comando entre paréntesis ():
$ (./test.sh &) $ ps -ef |
Prueba Grep 515 410 1 0 11:49? 00:00:00 /bin /sh ./test.sh 515 12483 21734 0 11:59 pts /12 00:00:00 prueba grep Nota: el entorno de prueba para este artículo es Red Hat Enterprise Linux AS versión 4 (Nahant Update 5), el shell es /bin /bash, y los diferentes sistemas operativos y comandos de shell pueden ser diferentes. Por ejemplo, KX de AIX no está deshabilitado, pero puede usar el PID nohup -p para obtener el mismo efecto que descartar.
Una forma más poderosa es usar la pantalla, primero cree un terminal virtual en modo desconectado y luego vuelva a conectarse al terminal virtual con la opción -r, cualquier comando que se ejecute en él puede llegar a nohup El efecto es que es más conveniente cuando hay varios comandos que deben ejecutarse continuamente en segundo plano:
$ screen -dmS screen_test $ screen-list Hay una pantalla en: 27963.screen_test (Separada) 1 Socket in /tmp /uscreens /S-jiangfeng. $ screen -r screen_test
Cómo desinstalar el JDK incorporado en Linux, muchos de nosotros podemos encontrar Java bajo el si
partición del disco en Linux, formateo del sistema de archivos y dispositivo raid - comparando el fo
Noticias de la tienda de computadoras: De acuerdo con el último informe de un sitio web de tecnologí
El lenguaje Go (es decir, Golang) es un lenguaje de programación desarrollado originalmente por Goo
Sistema operativo Linux programa de fondo de cambio de fondo
Tutorial de instalación para Gamit 10.35 bajo Fedora 13
Ambos métodos SUSE sistema de Linux10 instalado en el disco duro de
El servicio samba no está instalado y falla el inicio del sistema dual.
Proceso detallado de inicio del sistema Linux e inicialización del sistema
Cambie rápidamente Nginx como un servidor proxy de front-end de sitio web
Consejos prácticos: varias formas de eliminar Grub de los sistemas Linux
Implementación de Ubuntu del montaje permanente de la partición
Máquina virtual La desinstalación de VMware no es una solución completa
Win7 sistema U disco conectado a la computadora no respondió cómo resolver?
Método Win7 para manejar fallas del sistema a través de un registrador de pasos problemáticos
WindowsXP no puede obtener la solución de código de error 105 en línea
Sistema Vista para la gestión de particiones y el conflicto de particiones mágicas
Práctico: Colección de aplicaciones de habilidades de registro de WINDOWS XP (4)
Para Windows 2000 optimización del rendimiento del servidor Web
Cómo modificar la fuente en Windows 7 Notepad Cómo operar
¿Cómo eliminar el paquete de instalación de actualización del sistema Win10?