GNU/Linux >> Belajar Linux >  >> Linux

Proses Linux di latar belakang - Berhenti bekerja?

Dari apa yang bisa saya kumpulkan.

Pekerjaan latar belakang diblokir dari membaca terminal pengguna. Ketika seseorang mencoba melakukannya, itu akan ditangguhkan sampai pengguna membawanya ke latar depan dan memberikan beberapa masukan. "membaca dari terminal pengguna" dapat berarti langsung mencoba membaca dari terminal atau mengubah setelan terminal.

Biasanya itu yang Anda inginkan, tetapi terkadang program membaca dari terminal dan/atau mengubah pengaturan terminal bukan karena mereka memerlukan input pengguna untuk melanjutkan, tetapi karena mereka ingin memeriksa apakah pengguna mencoba memberikan input.

http://curiousthing.org/sigttin-sigttou-deep-dive-linux memiliki detail teknis yang mengerikan.


Di Linux dan sistem Unix lainnya, pekerjaan yang berjalan di latar belakang, tetapi masih memiliki stdin (atau std::cin ) yang terkait dengan terminal pengontrolnya (a.k.a. jendela tempat dijalankannya) akan dikirimi SIGTTIN sinyal, yang secara default menyebabkan program dihentikan sepenuhnya, sambil menunggu pengguna membawanya ke latar depan (fg %job atau serupa) untuk memungkinkan input benar-benar diberikan ke program. Untuk menghindari program dijeda dengan cara ini, Anda dapat:

  1. Pastikan program stdin saluran tidak lagi dikaitkan dengan terminal, baik dengan mengalihkannya ke file dengan konten yang sesuai untuk dimasukkan oleh program, atau ke /dev/null jika benar-benar tidak membutuhkan input - mis. myprogram < /dev/null & .
  2. Keluar dari terminal setelah memulai program, yang akan menyebabkan asosiasi dengan stdin program untuk pergi. Tapi ini akan menyebabkan SIGHUP untuk dikirim ke program (artinya saluran input/output mengalami "hangup") - ini biasanya menyebabkan program dihentikan, tetapi hal ini dapat dihindari dengan menggunakan nohup - mis. nohup myprogram & .

Jika Anda benar-benar tertarik untuk menangkap keluaran program, ini mungkin opsi terbaik, karena ini mencegah kedua sinyal di atas (serta beberapa lainnya), dan menyimpan keluaran untuk Anda lihat untuk menentukan apakah ada masalah dengan eksekusi program:

nohup myprogram < /dev/null > ${HOME}/myprogram.log 2>&1 &

Ya itu benar-benar dihentikan dan tidak lagi berfungsi di latar belakang. Untuk menghidupkannya kembali, ketik fg nomor_pekerjaan


Linux
  1. Cara Mengelola Pekerjaan Latar Belakang Linux dengan Perintah fg dan bg

  2. Linux – Apakah Proses Yang Memiliki Terminal Pengendali, Atau Sesi Yang Memiliki Terminal Pengendali?

  3. Proses latar belakang di linux

  1. Lakukan petualangan di terminal Linux Anda

  2. Proses yang berjalan di latar belakang terbunuh di linux

  3. Menjaga proses linux tetap berjalan setelah saya logout

  1. Cara Memulai Perintah Linux di Latar Belakang dan Melepaskan Proses di Terminal

  2. Bagaimana Cara Memulai Ulang (atau Mengatur Ulang) Proses yang Berjalan Di Linux?

  3. Linux – Perintah Untuk Menjalankan Proses Anak “offline” (tanpa Jaringan Eksternal) Di Linux?