Apa yang ditunjukkan oleh status "tidur interupsi"?

18

Saya menggunakan Firefox untuk menjalankan Parted Magic LiveCD, kemudian (mungkin) sebagai hasil dari kombinasi tombol yang tidak saya ingat, dengan cepat menghilang dari layar dan Task Bar / Window List.

Namun:

  1. ps ax | grep firefoxmengembalikan di bawah (dan grep firefoxbaris yang tidak dibutuhkan ). Baik psdan GUI Task Manager, tampilkan firefox dengan RSS, VM-SIZE dan penggunaan CPU 0% yang tampaknya tidak berubah.

    johndoe 1916 36.6 14.0 923772 504372 tty1 Sl 13:30 12:15 firefox


  2. pstree | grep firefox pengembalian:

    init─┬─2 * [ROX-Filer───firefox───25 * [{firefox}]]


  3. strace -p 1916 kembali, dan tampaknya tetap pada baris ini selamanya:

    futex(0xac975608), FUTEX_WAIT_PRIVATE, 1, NULL

Saya mengerti dari jawaban untuk apa nilai kolom STAT dalam ps artinya? itu S(dalam Sl) menunjukkan bahwa prosesnya dalam interruptible sleepkeadaan.

Adakah yang bisa menguraikan negara itu secara lebih detail?

EDIT

Saya akan memulai pertanyaan baru, dengan lebih spesifik di distro saya, untuk menjawab pertanyaan ke-2 yang asli.

user66001
sumber
@Braiam - Selesai. Saya enggan melakukan ini, seperti yang pertama kali saya lakukan, entah bagaimana bantuan berbalik dari masalah, menjadi diskusi berdasarkan kepercayaan saya menggunakan Parted Magic sebagai distro penuh waktu saya. Saya sangat berharap bahwa ini tidak akan terjadi saat ini :(
user66001

Jawaban:

18

@ msw melakukan pekerjaan dengan baik untuk menjelaskan Q ke-2 Anda, dan beberapa ke-1 Anda:

B) Sarankan cara yang relatif mudah untuk mendapatkan kembali segala bentuk kontrol, untuk (setidaknya) menyimpan tab yang telah saya buka secara mengganggu dalam mode Penjelajahan Pribadi?

Jadi saya akan mencoba dan menjawab Q pertama Anda sedikit lebih banyak:

A) Menguraikan apa negara itu, secara lebih rinci?

Nilai status Sl(Itu huruf kecil L):

   S    Interruptible sleep (waiting for an event to complete)
   l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

                 siklus hidup proses

PROCESS STATE CODES
   R  running or runnable (on run queue)
   D  uninterruptible sleep (usually IO)
   S  interruptible sleep (waiting for an event to complete)
   Z  defunct/zombie, terminated but not reaped by its parent
   T  stopped, either by a job control signal or because
      it is being traced
   [...]

Rincian lebih lanjut dapat dilihat di halaman manual sinyal man 7 signal,, serta dalam tutorial ini, berjudul: Status proses Linux .

slm
sumber
Sangat (!) Membantu untuk memahami pekerjaan batin. Terima kasih! +1
user66001
@ user66001 menerima jawabannya. itu juga membantu saya terima kasih.
muneeb_ahmed
8

Anda tidak melakukan apa pun pada proses Firefox. Itu sudah dalam keadaan S sebelumnya. "Interruptible sleep" secara efektif berarti diam. Proses sedang menunggu, dan akan bangun ketika menerima input. Itu adalah kondisi normal dari suatu proses kecuali Anda menangkapnya saat sedang sibuk.

Anda telah membuat jendela hilang. Mungkin Anda mengirimnya ke desktop yang berbeda. Cara mengembalikannya dengan cara "normal" sepenuhnya tergantung pada window manager Anda, yang tidak Anda tentukan.

Anda mungkin dapat mengambil jendela dengan alat lain tetapi agak tergantung pada apa yang sebenarnya terjadi padanya dan apakah manajer jendela Anda bekerja sama. Coba wmctrl . Pertama daftar dengan Firefox windows wmctrl -l | grep Firefox. Catat ID jendela di kolom pertama, misalnya 0x12345678. Untuk mengembalikan jendela ke desktop saat ini, gunakan wmctrl -R 0x12345678; sebagai alternatif, gunakan wmctrl -a 0x12345678untuk beralih ke desktop-nya. Untuk memaksimalkannya (yang menangani windows di luar layar atau menyusut menjadi satu piksel), jalankan wmctrl -r 0x12345678 -b add,maximized_vert,maximized_horz. Atau, pindahkan dan ubah ukuran jendela dengan wmctrl -r 0x12345678 -e 1,50,100,1000,800. Anda mungkin perlu menghapus atau menyembunyikan jendela dengan wmctrl -r 0x12345678 -b remove,shadedatau wmctrl -r 0x12345678 -b remove,hidden.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Terima kasih Gilles - Ini mungkin terdengar tidak biasa, tapi saya tidak yakin Window Manager mana yang saya jalankan. Mungkinkah itu LXDE (Terdaftar dalam kotak tentang LXPanel)? Selain itu, wmctrl sepertinya tidak tersedia di distro saya - Maafkan ketidaktahuan saya, tetapi dapatkah wmctrl hanya diunduh dan dijalankan, atau haruskah itu diinstal (dependensi, dll)?
user66001
@ user66001 LXDE adalah lingkungan desktop. Pengelola jendela default adalah Openbox (Saya tidak yakin apakah itu mendukung yang lain). Jika distribusi Anda tidak memiliki wmctrl, Anda dapat mencoba mengunduh sumber dan mengompilasinya. Tergantung pada beberapa perpustakaan, tetapi tidak ada yang eksotis, semuanya harus disediakan oleh distribusi Anda. Jika sudah xdotool, mungkin dapat melakukan semua ini, atau setidaknya yang berguna, jadi cobalah (lihat perintah jendela dan perintah desktop dan jendela di manual).
Gilles 'SO- stop being evil'
Ah terima kasih. Tidak xdotoolsalah - Ketika Anda bermaksud "mungkin dapat melakukan semua ini", apakah Anda berbicara tentang kompilasi wmctrl, atau operasi yang dapat Anda lakukan dengannya? Bisakah Anda mengarahkan saya ke panduan yang direkomendasikan tentang kompilasi sumber Linux (Baru ke Linux, dari lingkungan Windows)?
user66001
@ user66001 Saya maksudkan itu xdotooldan wmctrlmemiliki fungsi yang serupa (sejauh apa yang Anda butuhkan di sini, mereka berbeda dalam apa lagi yang mereka tawarkan). Jika Anda baru mengenal Linux, saya sarankan distribusi dengan lebih banyak paket. Jika Anda menjalankan RHEL atau varian seperti CentOS atau Scientific Linux, ada paket di Repoforge . Jika Anda ingin membangun dari sumber, baca ini - tetapi akan lebih mudah untuk menginstal paket jika Anda dapat menemukannya.
Gilles 'SO- stop being evil'
Adakah perbedaan alat mana yang lebih mudah dibangun? Juga, jika seseorang tidak memiliki manajer paket di distro mereka, jenis paket apa? haruskah orang mencari (saya kira ini adalah pertanyaan yang tidak masuk akal, tapi kalau-kalau saya salah dalam menganggap sebuah paket hanyalah sekumpulan binari, dengan dependensi yang terdaftar, dan mengonfigurasi perubahan, pikir saya akan bertanya)?
user66001
2

Adalah mungkin bagi klien X untuk kehilangan koneksi mereka dan entah bagaimana tidak diberitahu tentang itu. Proses ini akan sering menunggu di soket di mana tidak ada yang akan datang, meninggalkannya dalam tidur yang tidak terputus.

Untuk Firefox hanya (dan beberapa program lain seperti gvim atau Chrome yang membuat ketentuan khusus untuk menyimpan negara dalam kegagalan) sederhana:

$ kill -TERM pid

akan memberikan proses kesempatan untuk menyimpan daftar tab yang terbuka, tetapi saya tidak akan mengandalkan konten formulir atau status lain untuk disimpan.

msw
sumber
Agak tidak mungkin bahwa klien X lokal akan kehilangan koneksi dengan server X, terutama sebagai akibat dari menekan tombol. Membunuh Firefox tidak akan menyimpan informasi tentang windows dalam mode penelusuran pribadi.
Gilles 'SANGAT berhenti menjadi jahat'
Saya memanfaatkan Lazarus , dan (ketika tidak menggunakan mode Penjelajahan Pribadi untuk mencoba dan beralih akun gmail utama saya, untuk membuka gdocs untuk melihat / mengedit dokumen menggunakan info dari situs web di sebelah tab, tanpa logout dari semua akun gmail saya - Grr, Google) memiliki FF "Ingat jendela & tab saya dari terakhir kali", jadi saya hanya peduli dengan tab yang terbuka dalam mode Penjelajahan Pribadi. Jadi, meskipun baik untuk mengetahui argumen di atas kill, saya ragu FF akan menyelamatkan tab saya dalam situasi ini. Adakah cara bagi FF untuk memasang kembali ke X?
user66001
"Adakah cara bagi FF untuk kembali ke X?" karena saya tidak pernah bisa mengetahui bagaimana jendela dapat dipetakan / dihancurkan tanpa proses klien mendapatkan sinyal, saya berasumsi bahwa soket dari program FF ke UI tetap terbuka. Selama suatu proses terhubung ke soket, saya tahu tidak mungkin proses apa pun dapat memanfaatkannya. (Sekarang Anda membuat saya berpikir tentang hal itu, saya curiga ini datang dari kesalahan protokol antara server X dan klien yang sangat sulit (yaitu saya tidak akan pernah mencoba) untuk debug).
msw