2010-04-28 13 views
13

Ho bisogno di eseguire uno script (bash o perl o php, qualsiasi altro eseguirà) un altro comando e poi uscire, mentre l'altro comando è ancora in esecuzione ed esce da solo. Potevo programmare via al comando, ma ero curioso di sapere se c'era un modo più semplice.spawn un processo completamente separato in linux via bash

+0

È la pianificazione tramite cron un'opzione? –

+0

Potresti voler elaborare le tue esigenze, perché la risposta corretta potrebbe dipendere da questo ... (1) quale processo o azione dell'utente avvierà lo script? (2) perché vuoi uno script piuttosto che lanciare direttamente il comando? (3) è necessario registrare l'output, scollegarlo dal terminale e/o avviare un nuovo gruppo di processi per il comando? (4) altri commenti? – NVRAM

risposta

24
#!/bin/sh 

your_cmd & 

echo "started your_cmd, now exiting!" 

costrutti simile esiste per Perl e PHP, ma in sh/bash è molto facile da eseguire un altro comando in background e procedono.

modificare

una buona fonte per la manipolazione processo generico sono tutti gli script di avvio sotto /etc/init.d. Fanno ogni sorta di trucchetti come tenere traccia dei pid, eseguire comandi base start/stop/restart ecc.

+0

Una cosa che mi ha catturato in relazione a questo - non è possibile ... [$ var -eq 1] && your_cmd & ... perché il processo genitore continuerà a funzionare. – chrism1

+0

Potrebbe essere necessario usare 'nohup' per impedire a' your_cmd' di morire dopo aver chiuso la shell; guarda la risposta di camh. – reinierpost

4

&?

 
    #!/usr/bin/bash 
    # command1.sh: execute command2.sh and exit 
    command2.sh & 
+2

Come hai preso un unicorno a quattro corna, con tutte e quattro le corna in testa? –

+2

È un corno, ma è in piedi di fronte a un arcobaleno. – mob

4

io non sono del tutto sicuro se questo è quello che stai cercando, ma è possibile sfondo un processo eseguito in un guscio aggiungendo la e commerciale (&) simbolo come l'ultimo carattere del comando.

Quindi, se avete lo script, a.sh

e a.sh ha bisogno di generare un processo separato, come dire eseguire il b.sh sceneggiatura, devi:

b.sh & 
14

Per eseguire un comando in background, è possibile aggiungere un '&' al comando.

Se è necessario il programma per superare la sessione di accesso, è possibile utilizzare nohup.

Vai a questa discussione simile StackOverflow: how to run a command in the background ...

3

Finché lei ha ricordato Perl:

fork || exec "ls"; 

... dove "ls" è nulla. Ripeti il ​​numero di comandi di cui hai bisogno per sparare.

+0

Oppure, solo "exec" ls ";" se non è necessario continuare il processo corrente. E il vantaggio di questo approccio è ottenere l'output STDOUT inviato alla console (come se avessi digitato il comando dalla riga di comando). –

5

Il modo usuale per eseguire un comando e mantenerlo in esecuzione al momento del logout è utilizzare nohup(1). nohup impedisce al comando dato di ricevere il segnale HUP all'uscita dalla shell. È inoltre necessario eseguire in background con il suffisso del comando e commerciale (&).

$ nohup some_command arg1 arg2 & 
Problemi correlati