GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara memotong proses yang tidak mati saat shell keluar?

Metode yang paling andal tampaknya adalah:

(setsid emacs &)

Ini menggunakan ( &) untuk bercabang ke latar belakang, dan setsid untuk melepaskan dari tty pengendali.

Anda dapat menempatkan ini dalam fungsi shell:

fork() { (setsid "[email protected]" &); }

fork emacs

Kemungkinannya adalah:

  • disown perintah bawaan:

    emacs &
    disown $!
    

    & bertindak sebagai pemisah perintah, dan disown akan default ke pekerjaan terbaru, sehingga ini dapat disingkat menjadi:

    emacs & disown
    
  • Gandakan-fork() :

    (emacs &)
    

    Perintah di dalam tanda kurung ( ) dijalankan dalam proses shell terpisah.

  • setsid , seperti yang disarankan oleh Rich, mungkin merupakan pilihan terbaik, karena ini membatalkan penyetelan TTY pengontrol proses dengan membuat sesi baru:

    setsid emacs
    

    Namun, ini juga sedikit tidak dapat diprediksi - hanya akan fork() ke latar belakang jika pemimpin grup proses (yang tidak akan terjadi jika setsid digunakan dalam sh naskah, misalnya; dalam kesempatan seperti itu hanya akan menjadi resisten terhadap Ctrl-C.)


Anda tidak menyebutkan apakah ini berjalan sebagai aplikasi X atau aplikasi konsol.

Jika sebagai aplikasi konsol, tentunya harus ditutup. Anda membuang input/outputnya, lebih teknis (pseudo) tty yang aktif. Sangat tidak mungkin ini yang Anda maksud, jadi anggap saja Anda sedang membicarakan aplikasi X.

nohup harus bekerja, tidak yakin mengapa tidak. Ketika shell ditutup, ia mengirimkan SIGHUP untuk semua proses dalam kelompok prosesnya. nohup memberi tahu perintah untuk mengabaikan SIGHUP.

Anda juga dapat mencoba setsid, yang memutus proses dari grup proses

alias emacs='setsid emacs'

Atau tambahkan disown setelah &


Periksa pengaturan shell Anda. Anda juga dapat mencoba screen daripada nohup .


Linux
  1. Bagaimana Cara Menjalankan Script Di Shell Saat Tombol Pintasan Ditekan?

  2. Bagaimana Memulai Semua Sesi Shell Di Direktori Selain $home?

  3. Bagaimana cara membuat proses anak mati setelah orang tua keluar?

  1. Apakah ada distro Linux atau tambalan kernel yang menghapus ruang memori proses setelah proses keluar?

  2. Bagaimana cara menjalankan skrip ketika surat tiba di server surat? (Debian)

  3. Bagaimana cara menonaktifkan shutdown agar proses penting tidak dapat dihentikan?

  1. Linux - Bagaimana saya melihat kapan suatu proses dimulai?

  2. Bagaimana cara memulai shell kedua saat dalam mode pengguna tunggal?

  3. Bagaimana cara membunuh proses yang tidak pernah mati?