Saya mendapatkan pesan There are stopped jobs.
ketika saya mencoba keluar dari bash shell kadang-kadang. Berikut ini adalah skenario yang dapat direproduksi dalam python 2.x:
- ctrl+ cditangani oleh juru bahasa sebagai pengecualian.
- ctrl+ z'menghentikan' prosesnya.
- ctrl+ dkeluar python untuk real.
Berikut adalah beberapa keluaran terminal dunia nyata:
example_user@example_server:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
ctrl+z
[1]+ Stopped python
example_user@example_server:~$ exit
logout
There are stopped jobs.
Bash tidak keluar, saya harus exit
kembali untuk keluar dari bash shell.
- T: Apa itu 'pekerjaan yang dihentikan', atau apa artinya ini?
- T: Dapatkah proses yang dihentikan dilanjutkan?
- T: Apakah yang pertama
exit
membunuh pekerjaan yang dihentikan? - T: Apakah ada cara untuk keluar dari shell pertama kali? (tanpa memasukkan
exit
dua kali)
Jawaban:
Pekerjaan yang dihentikan adalah pekerjaan yang sementara waktu diletakkan di latar belakang dan tidak lagi berjalan, tetapi masih menggunakan sumber daya (yaitu memori sistem). Karena pekerjaan itu tidak melekat pada terminal saat ini, itu tidak dapat menghasilkan output dan tidak menerima input dari pengguna.
Anda dapat melihat pekerjaan yang telah Anda jalankan menggunakan
jobs
perintah builtin di bash, mungkin shell lain juga. Contoh:Anda bisa melanjutkan pekerjaan yang dihentikan dengan menggunakan
fg
perintah built-in (foreground) bash. Jika Anda memiliki beberapa perintah yang telah dihentikan, Anda harus menentukan yang mana untuk melanjutkan dengan melewati nomor jobspec pada baris perintahfg
. Jika hanya satu program yang dihentikan, Anda dapat menggunakannyafg
sendiri:Pada titik ini Anda kembali ke juru bahasa python dan dapat keluar dengan menggunakan control-D.
Sebaliknya, Anda dapat
kill
perintah dengan itu jobspec atau PID. Misalnya:Untuk menggunakan jobspec, awali angka tersebut dengan kunci persen (%):
Jika Anda mengeluarkan perintah keluar dengan pekerjaan yang berhenti, peringatan yang Anda lihat akan diberikan. Pekerjaan akan dibiarkan berjalan untuk keselamatan. Itu untuk memastikan Anda sadar Anda sedang mencoba untuk membunuh pekerjaan yang mungkin Anda lupakan bahwa Anda berhenti. Kali kedua Anda menggunakan perintah keluar, pekerjaan dihentikan dan shell keluar. Ini dapat menyebabkan masalah untuk beberapa program yang tidak dimaksudkan untuk dibunuh dengan cara ini.
Dalam bash tampaknya Anda dapat menggunakan
logout
perintah yang akan mematikan proses yang terhenti dan keluar. Ini dapat menyebabkan hasil yang tidak diinginkan.Perhatikan juga bahwa beberapa program mungkin tidak keluar ketika diakhiri dengan cara ini, dan sistem Anda bisa berakhir dengan banyak proses yatim yang menggunakan sumber daya jika Anda terbiasa melakukan hal itu.
Perhatikan bahwa Anda dapat membuat proses latar belakang yang akan berhenti jika mereka membutuhkan input pengguna:
Anda dapat melanjutkan dan membunuh pekerjaan ini dengan cara yang sama seperti Anda melakukan pekerjaan yang Anda hentikan dengan
Ctrl-z
interupsi.sumber
Pekerjaan yang dihentikan berarti proses yang menerima sinyal stop (
SIGSTOP
/SIGTSTP
) dari keyboard (karakter suspend Ctrl-Z), perintah (misalnyakill -STOP [PID]
) atau proses lain (mis. Kernel ketika sistem kekurangan sumber daya) dan ia dalam kondisi jeda, sehingga memberitahu sistem untuk berhenti / menunda suatu proses sehingga tidak akan melakukan eksekusi / pemrosesan.Pekerjaan shell aktif dapat terdaftar oleh:
jobs
.Proses yang terhenti hanya akan melanjutkan eksekusinya jika mengirim
SIGCONT
sinyal. Ini dapat dicapai denganfg
(ataufg ID
) yang akan memindahkan pekerjaan ke latar depan menjadikannya pekerjaan saat ini,bg
untuk melanjutkannya di latar belakang, atau dengan mengirimSIGCONT
sinyal (misalnyakill -CONT [PID]
).Pertama kali ketika Anda mengetik
exit
/logout
atau menekan Ctrl-D, shell mencetak pesan peringatan tentang pekerjaan aktif saat ini yang terkait dengan terminal Anda, karena itu tidak akan membunuh Anda yang tanpa izin Anda dengan mengonfirmasi tindakan kedua kalinya. Jikacheckjobs
opsi ini diaktifkan (shopt -s checkjobs
), ia juga dapat mencantumkan pekerjaan dengan statusnya.Anda dapat menekan Ctrl+Ddua kali atau menahannya lebih lama, ini akan keluar dari shell quiet dengan cepat membunuh pekerjaan shel / shel yang terhenti saat ini.
Atau tidak mengakui mereka (
disown
) untuk meninggalkan mereka atau membunuh mereka secara manual:kill $(jobs -p)
.sumber