Bagaimana mengatur perintah di latar belakang, menutup terminal dan mengembalikannya ke fg?

10

Saya mencoba mencari tahu cara menjalankan perintah di latar belakang dan kemudian membawanya ke latar depan nanti. Saya muak dengan tutorial dan jawaban di mana orang-orang menyatakan itu sederhana, tambahkan saja &pada akhir perintah untuk menjalankannya di latar belakang. Ini hanya berfungsi dalam satu jendela terminal. Saya ingin meletakkan perintah di latar belakang dalam satu terminal dan mengembalikannya ke latar depan setelah membuka kembali terminal

Contoh:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

Tentu saja setelah penutupan terminal tidak ada pekerjaan yang ditemukan.

Contoh selanjutnya:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

Apa kesalahan yang telah aku perbuat? Adakah yang bisa menjelaskan saya cara menjalankan perintah di latar belakang dan mendapatkannya kembali ke latar depan.

Timur Fayzrakhmanov
sumber

Jawaban:

11

Tidak mungkin seperti yang Anda inginkan.

Mari kita tinjau beberapa konsep dasar:

  • Grup proses adalah kumpulan proses terkait yang semuanya dapat diberi sinyal sekaligus.
  • Sesi adalah kumpulan kelompok proses, yang baik terpasang ke perangkat terminal tunggal (dikenal sebagai terminal pengendali) atau tidak melekat pada terminal apa pun.

Jika Anda menutup terminal, semua proses dalam sesi itu mati kecuali mereka (daemon) yang diperbaiki untuk proses init. Dan tidak ada cara untuk memberi mereka terminal pengendali lagi.

Singkatnya, proses reparenting sangat dibatasi dalam sistem POSIX (daemonisasi adalah pengecualian) dan persyaratan Anda tidak dapat dipenuhi.

sgx1
sumber
6
Secara teknis ini adalah jawaban yang benar, tetapi saya percaya pengunjung yang mengalami masalah ini akan menemukan "solusi mereka" di jawaban lain yang menyebutkan layar / byobu / tmux.
Programster
Anda benar .., tetapi dari sudut pandang saya, konsep dasar lebih penting untuk memahami sistem bekerja lebih baik dan memahami apa yang Anda inginkan dan lakukan salah. Terima kasih semuanya!
Timur Fayzrakhmanov
16
  1. Pasang screen:

    sudo apt-get install screen
  2. Mulai screen:

    screen -S session_name
  3. Jalankan perintah Anda apa yang Anda butuhkan.

  4. Lepaskan screendari terminal (perintah Anda akan tetap berjalan):

    Tekan CTRL+ a+d

  5. Tutup terminal

  6. Buka terminal lain dan pasang kembali screensesi terakhir :

    screen -r

Untuk informasi lebih lanjut dan opsi tambahan untuk screenmelihat man screen.

elang
sumber
2
Layar atau byobu (terutama jika Anda menjalankan ubuntu). Byobu didasarkan pada layar jika saya benar, tetapi saya menemukan bahwa ia memiliki fungsi tambahan yang saya temukan berguna dan lebih mudah digunakan, tapi itu masalah pendapat.
Programster
Terima kasih saran yang bagus! Mungkin itu akan perlu di fitur!) Dari Rusia dengan cinta <3
Timur Fayzrakhmanov
@Programster, ya, Byobu adalah mantan. layar. Ini memiliki kedua byobu-screen dan byobu-tmux.
user.dz
1
Saya merekomendasikan tmuxsebagai alternatif screen.
gerrit
5

Sudahkah Anda mencoba: byobuatau tmuxyang merupakan multiplexer terminal. Tidak persis apa yang Anda cari, tetapi memiliki perilaku yang sama.

byobu-screen

Kemudian jalankan perintah Anda, untuk melepaskan:

byobu-screen -d

Untuk melanjutkan:

byobu-screen -r

Lihat https://help.ubuntu.com/community/Screen

user.dz
sumber
Mereka juga, +1.
Falcon