Terdapat beberapa keadaan proses linux

Mar 13, 2023 am 10:11 AM
linux status proses

Proses Linux mempunyai 6 keadaan: 1. R keadaan boleh laku, hanya proses dalam keadaan ini boleh berjalan pada CPU; 2. S keadaan tidur terganggu, proses dalam keadaan ini sedang menunggu sesuatu Peristiwa berlaku dan digantung; 3. D keadaan tidur tidak terganggu, proses berada dalam keadaan tidur, tetapi proses tidak terganggu pada masa ini 4. T keadaan jeda atau keadaan penjejakan, hantar isyarat SIGSTOP kepada proses, dan ia akan Memasuki keadaan T sebagai tindak balas kepada isyarat ini; 5. Z keadaan zombie, menunjukkan bahawa proses hampir mati;

Terdapat beberapa keadaan proses linux

Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.

Di Linux, proses mempunyai 6 keadaan, iaitu: keadaan boleh laku, keadaan tidur terganggu, keadaan tidur tidak terganggu, keadaan digantung atau keadaan penjejakan, keadaan zombi dan keadaan kematian.

Penjelasan terperinci status proses Linux

Status boleh laku R(TASK_RUNNING)

Hanya dalam ini Hanya proses dalam keadaan ini boleh dijalankan pada CPU. Mungkin terdapat berbilang proses dalam keadaan boleh laku pada masa yang sama, dan struktur task_struct (blok kawalan proses) proses ini dimasukkan ke dalam baris gilir boleh laku CPU yang sepadan (proses hanya boleh muncul dalam baris gilir boleh laku satu CPU pada kebanyakan). Tugas penjadual proses adalah untuk memilih proses daripada baris gilir boleh laku setiap CPU untuk dijalankan pada CPU tersebut.

Banyak buku teks sistem pengendalian mentakrifkan proses yang dilaksanakan pada CPU sebagai keadaan RUNNING dan proses yang boleh dilaksanakan tetapi belum lagi dijadualkan untuk pelaksanaan sebagai keadaan READY kedua-dua keadaan ini disatukan ke dalam keadaan TASK_RUNNING di bawah Linux.

S(TASK_INTERRUPTIBLE) Keadaan tidur terganggu

Proses dalam keadaan ini sedang menunggu peristiwa tertentu berlaku (seperti menunggu sambungan soket, menunggu semaphore), Dan telah digantung. Struktur task_struct proses ini dimasukkan ke dalam baris gilir menunggu peristiwa yang sepadan. Apabila peristiwa ini berlaku (dicetuskan oleh gangguan luaran atau dicetuskan oleh proses lain), satu atau lebih proses dalam baris gilir menunggu yang sepadan akan dibangkitkan.

Melalui arahan ps kita akan melihat bahawa dalam keadaan biasa, sebahagian besar proses dalam senarai proses berada dalam keadaan TASK_INTERRUPTIBLE (melainkan beban pada mesin sangat tinggi). Lagipun, terdapat hanya satu atau dua CPU, dan selalunya terdapat berpuluh-puluh atau beratus-ratus proses Jika tidak kebanyakan proses sedang tidur, bagaimana CPU boleh bertindak balas?

D(TASK_UNINTERRUPTIBLE) Keadaan tidur tidak terganggu

Sama seperti keadaan TASK_INTERRUPTIBLE, proses berada dalam keadaan tidur, tetapi proses tidak terganggu pada masa ini. Tidak boleh terganggu tidak bermakna CPU tidak bertindak balas terhadap gangguan daripada perkakasan luaran, tetapi proses itu tidak bertindak balas kepada isyarat tak segerak.

Dalam kebanyakan kes, proses harus sentiasa dapat bertindak balas kepada isyarat tak segerak apabila ia dalam keadaan tidur. Jika tidak, anda akan terkejut apabila mendapati pembunuhan -9 tidak boleh membunuh proses tidur! Jadi kita juga boleh memahami dengan mudah mengapa proses yang dilihat oleh arahan ps jarang muncul dalam keadaan TASK_UNINTERRUPTIBLE, tetapi sentiasa dalam keadaan TASK_INTERRUPTIBLE.

Kepentingan keadaan TASK_UNINTERRUPTIBLE ialah aliran pemprosesan tertentu kernel tidak boleh diganggu. Jika anda bertindak balas kepada isyarat tak segerak, proses untuk memproses isyarat tak segerak akan dimasukkan ke dalam proses pelaksanaan program (proses yang dimasukkan ini mungkin hanya wujud dalam mod kernel, atau boleh dilanjutkan ke mod pengguna), jadi proses asal akan tergendala.

Apabila proses beroperasi pada perkakasan tertentu (contohnya, proses memanggil panggilan sistem baca untuk membaca fail peranti tertentu, dan panggilan sistem baca akhirnya melaksanakan kod pemacu peranti yang sepadan dan berkomunikasi dengan yang sepadan interaksi peranti fizikal), anda mungkin perlu menggunakan keadaan TASK_UNINTERRUPTIBLE untuk melindungi proses bagi mengelakkan interaksi antara proses dan peranti daripada terganggu, menyebabkan peranti jatuh ke dalam keadaan tidak terkawal. Keadaan TASK_UNINTERRUPTIBLE dalam kes ini sentiasa sangat singkat dan pada dasarnya mustahil untuk ditangkap melalui arahan ps.

Terdapat juga keadaan TASK_UNINTERRUPTIBLE yang mudah ditangkap dalam sistem Linux. Selepas melaksanakan panggilan sistem vfork, proses induk akan memasuki keadaan TASK_UNINTERRUPTIBLE sehingga proses anak memanggil exit atau exec.

T(TASK_STPPED atau TASK_TRACED) keadaan jeda atau keadaan surih

Hantar isyarat SIGSTOP kepada proses dan ia akan memasuki keadaan TASK_STOPPED sebagai tindak balas kepada isyarat ( melainkan proses itu sendiri berada dalam keadaan TASK_UNINTERRUPTIBLE dan tidak bertindak balas kepada isyarat). (SIGSTOP, seperti isyarat SIGKILL, adalah sangat wajib. Proses pengguna tidak dibenarkan untuk menetapkan semula fungsi pemprosesan isyarat yang sepadan melalui panggilan sistem siri isyarat.)

Menghantar isyarat SIGCONT kepada proses boleh menjadikannya berubah daripada keadaan TASK_STOPPED Pulihkan kepada keadaan TASK_RUNNING.

Apabila sesuatu proses sedang dikesan, ia berada dalam keadaan khas TASK_TRACED. "Dijejaki" bermakna proses dijeda dan menunggu proses yang menjejakinya beroperasi padanya. Sebagai contoh, jika anda menetapkan titik putus pada proses yang dijejaki dalam gdb, proses tersebut akan berada dalam keadaan TASK_TRACED apabila ia berhenti pada titik putus. Pada masa lain, proses yang dijejaki masih di negeri-negeri yang dinyatakan sebelum ini.

Untuk proses itu sendiri, keadaan TASK_STOPPED dan TASK_TRACED adalah sangat serupa, kedua-duanya menunjukkan bahawa proses itu digantung.

Keadaan TASK_TRACED adalah bersamaan dengan lapisan perlindungan tambahan di atas TASK_STOPPED Proses dalam keadaan TASK_TRACED tidak boleh dibangkitkan sebagai tindak balas kepada isyarat SIGCONT. Proses penyahpepijatan hanya boleh kembali kepada keadaan TASK_RUNNING sehingga proses penyahpepijatan menjalankan operasi seperti PTRACE_CONT dan PTRACE_DETACH melalui panggilan sistem ptrace (operasi ditentukan melalui parameter panggilan sistem ptrace), atau proses penyahpepijatan keluar.

Z(TASK_DEAD - EXIT_ZOMBIE) Keadaan zombi, proses menjadi proses zombi

Proses berada dalam keadaan TASK_DEAD semasa proses keluar.

Semasa proses keluar ini, semua sumber yang diduduki oleh proses akan dikitar semula, kecuali untuk struktur task_struct (dan beberapa sumber). Jadi proses itu ditinggalkan hanya dengan cangkang kosong task_struct, jadi ia dipanggil zombi.

Sebab mengapa task_struct dikekalkan adalah kerana task_struct menyimpan kod keluar proses dan beberapa maklumat statistik. Dan proses induknya mungkin mengambil berat tentang maklumat ini. Sebagai contoh, dalam shell, pembolehubah $? menyimpan kod keluar proses latar depan terakhir yang keluar, dan kod keluar ini sering digunakan sebagai syarat penghakiman pernyataan if.

Sudah tentu, kernel juga boleh menyimpan maklumat ini di tempat lain dan melepaskan struktur task_struct untuk menjimatkan ruang. Walau bagaimanapun, adalah lebih mudah untuk menggunakan struktur task_struct, kerana hubungan carian dari pid ke task_struct telah diwujudkan dalam kernel, serta hubungan ibu bapa-anak antara proses. Untuk melepaskan task_struct, anda perlu mencipta beberapa struktur data baharu supaya proses induk boleh mencari maklumat keluar dari proses anaknya.

Proses induk boleh menunggu untuk keluar dari satu atau beberapa proses anak melalui siri tunggu panggilan sistem (seperti wait4, waitid) dan mendapatkan maklumat keluarnya. Kemudian siri tunggu panggilan sistem juga akan melepaskan badan proses anak (task_struct).

Apabila proses anak keluar, kernel akan menghantar isyarat kepada proses induknya untuk memberitahu proses induk untuk "mengumpul mayat". Isyarat ini lalai kepada SIGCHLD, tetapi boleh ditetapkan semasa membuat proses anak melalui panggilan sistem klon.

Selagi proses induk tidak keluar, proses anak dalam keadaan zombie ini akan sentiasa wujud. Jadi jika proses ibu bapa keluar, siapa yang akan "mengutip mayat" proses anak?

Apabila proses keluar, semua proses anak akan dihoskan oleh proses lain (menjadikan proses anak proses lain). Siapa yang diamanahkan? Ini mungkin proses seterusnya dalam kumpulan proses proses keluar (jika ada), atau proses nombor 1. Jadi setiap proses dan setiap saat mempunyai proses induk. Melainkan proses nombor 1.

Proses No. 1, proses dengan pid 1, juga dipanggil proses init. Selepas sistem Linux bermula, proses mod pengguna pertama yang dibuat ialah proses init. Ia mempunyai dua misi:

  • Laksanakan skrip pemulaan sistem dan buat satu siri proses (semuanya adalah turunan daripada proses init); 🎜> Tunggu acara keluar dari proses anaknya dalam gelung tak terhingga, dan panggil panggilan sistem tunggu untuk menyelesaikan kerja "pengumpulan mayat"; dibunuh (Ini dijamin oleh kernel). Ia berada dalam keadaan TASK_INTERRUPTIBLE sementara menunggu proses anak keluar dan berada dalam keadaan TASK_RUNNING semasa proses "pemulihan".

  • X(TASK_DEAD - EXIT_DEAD) keadaan kematian, proses akan dimusnahkan

  • Dan proses mungkin tidak mengekalkan task_struct semasa proses keluar. Sebagai contoh, proses ini ialah proses boleh tanggal dalam program berbilang benang.

Atau proses induk secara eksplisit mengabaikan isyarat SIGCHLD dengan menetapkan pengendali isyarat SIGCHLD kepada SIG_IGN. (Ini ialah spesifikasi POSIX, walaupun isyarat keluar proses anak boleh ditetapkan kepada isyarat selain SIGCHLD.)

Pada ketika ini, proses akan diletakkan dalam status keluar EXIT_DEAD, yang bermaksud perkara berikut kod segera Proses akan dikeluarkan sepenuhnya. Jadi keadaan EXIT_DEAD adalah sangat singkat dan hampir mustahil untuk ditangkap dengan arahan ps.

Keadaan awal proses

Proses dicipta melalui siri fork panggilan sistem (fork, klon, vfork), kernel (atau modul Kernel) juga boleh mencipta proses kernel melalui fungsi kernel_thread. Fungsi yang mencipta subproses ini pada asasnya melaksanakan fungsi yang sama - salin proses panggilan untuk mendapatkan subproses. (Anda boleh memutuskan sama ada pelbagai sumber dikongsi atau peribadi melalui parameter pilihan.)

Jadi oleh kerana proses panggilan berada dalam keadaan TASK_RUNNING (jika tidak, jika ia tidak berjalan, bagaimanakah ia boleh dipanggil?), proses anak juga berada dalam keadaan TASK_RUNNING secara lalai. Di samping itu, klon panggilan sistem dan fungsi kernel kernel_thread juga menerima pilihan CLONE_STOPPED, dengan itu menetapkan keadaan awal proses anak kepada TASK_STOPPED.

Perubahan status proses

Selepas proses dibuat, status mungkin mengalami beberapa siri perubahan sehingga proses keluar. Walaupun terdapat beberapa keadaan proses, terdapat hanya dua arah untuk perubahan keadaan proses - daripada keadaan TASK_RUNNING kepada keadaan bukan-TASK_RUNNING, atau daripada keadaan bukan-TASK_RUNNING kepada keadaan TASK_RUNNING.

Maksudnya, jika isyarat SIGKILL dihantar ke proses dalam keadaan TASK_INTERRUPTIBLE, proses itu akan dibangkitkan terlebih dahulu (masukkan keadaan TASK_RUNNING), dan kemudian keluar sebagai tindak balas kepada isyarat SIGKILL (tukar kepada keadaan TASK_DEAD). Ia tidak akan keluar terus dari keadaan TASK_INTERRUPTIBLE.

Proses berubah daripada keadaan bukan-TASK_RUNNING kepada keadaan TASK_RUNNING oleh proses lain (yang mungkin juga pengendali sampuk) yang menjalankan operasi bangun tidur. Proses yang melakukan kebangkitan menetapkan status proses yang dibangkitkan kepada TASK_RUNNING, dan kemudian menambah struktur task_structnya pada baris gilir boleh laku CPU. Kemudian proses yang dibangkitkan akan mempunyai peluang untuk dijadualkan untuk pelaksanaan.

Terdapat dua cara untuk proses menukar daripada keadaan TASK_RUNNING kepada keadaan bukan-TASK_RUNNING:

  • Sebagai tindak balas kepada isyarat, ia memasuki keadaan TASK_STOPED atau keadaan TASK_DEAD;

  • Melaksanakan panggilan sistem secara aktif memasuki keadaan TASK_INTERRUPTIBLE (seperti panggilan sistem nanosleep), atau keadaan TASK_DEAD (seperti keluar dari panggilan sistem); atau memasuki keadaan TASK_INTERRUPTIBLE atau kerana sumber yang diperlukan untuk melaksanakan panggilan sistem tidak dapat dipenuhi status TASK_UNINTERRUPTIBLE (seperti pilih panggilan sistem).

Jelas sekali, kedua-dua situasi ini hanya boleh berlaku jika proses itu dilaksanakan pada CPU.

Penerangan status proses Linux

状态符 状态全称 描 述
R TASK_RUNNING 可执行状态&运行状态(在 run_queue 队列里的状态)
S TASK_INTERRUPTIBLE 可中断的睡眠状态, 可处理 signal
D TASK_UNINTERRUPTIBLE 不可中断的睡眠状态, 可处理 signal, 有延迟
T TASK_STOPPED or TASK_TRACED 暂停状态或跟踪状态, 不可处理 signal, 因为根本没有时间片运行代码
Z TASK_DEAD - EXIT_ZOMBIE 退出状态,进程成为僵尸进程。不可被 kill, 即不响应任务信号, 无法用 SIGKILL 杀死

Pengetahuan lanjutan: Apakah itu giliran menunggu, apakah itu giliran berjalan, apakah adalah hang Memulakan/menyekat, apakah itu proses bangun tidur

Kami meletakkan task_struct (run_queue) dari keadaan berjalan ke dalam baris gilir menunggu, yang dipanggil menangguhkan menunggu (menyekat) daripada baris gilir menunggu ke baris gilir berjalan , yang dijadualkan oleh CPU dipanggil proses bangun

Apabila proses sedang berjalan, kerana beberapa keadaan operasinya belum sedia (contohnya, rangkaian diperlukan tetapi kad rangkaian tidak tersedia, atau ia perlu menunggu IO, iaitu, ia perlu menggunakan luaran (set), ia akan diletakkan dalam baris gilir menunggu, dan bit status dalam task_struct juga akan ditukar kepada S/D.

Apabila proses berada dalam keadaan S/D, ia sedang menunggu dalam baris gilir menunggu untuk menggunakan peranti (seperti kad rangkaian, monitor cakera, dll.)

Baris gilir menunggu untuk CPU dipanggil baris gilir larian Peranti dipanggil gilir menunggu

Proses yang dipanggil, apabila berjalan, mungkin berada dalam baris gilir yang berbeza kerana keperluan operasi

Dalam baris gilir yang berbeza, status adalah Ia berbeza

Apabila proses berada dalam keadaan R, jika ia memerlukan beberapa jenis persisian, tetapi persisian sedang digunakan, saya akan menukar keadaan anda kepada S/D, dan kemudian menukar task_struct anda Masukkan ia barisan menunggu

Cadangan berkaitan: "Tutorial Video Linux"

Atas ialah kandungan terperinci Terdapat beberapa keadaan proses linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Konfigurasi komputer apa yang diperlukan untuk vscode Konfigurasi komputer apa yang diperlukan untuk vscode Apr 15, 2025 pm 09:48 PM

Keperluan Sistem Kod Vs: Sistem Operasi: Windows 10 dan ke atas, MACOS 10.12 dan ke atas, pemproses pengedaran Linux: minimum 1.6 GHz, disyorkan 2.0 GHz dan ke atas memori: minimum 512 MB, disyorkan 4 GB dan ke atas ruang penyimpanan: minimum 250 mb, disyorkan 1 GB dan di atas keperluan lain:

VSCode tidak dapat memasang pelanjutan VSCode tidak dapat memasang pelanjutan Apr 15, 2025 pm 07:18 PM

Sebab -sebab pemasangan sambungan kod VS mungkin: ketidakstabilan rangkaian, kebenaran yang tidak mencukupi, isu keserasian sistem, versi kod VS terlalu lama, perisian antivirus atau gangguan firewall. Dengan menyemak sambungan rangkaian, keizinan, fail log, mengemas kini kod VS, melumpuhkan perisian keselamatan, dan memulakan semula kod VS atau komputer, anda boleh menyelesaikan masalah dan menyelesaikan masalah secara beransur -ansur.

Apr 16, 2025 pm 07:39 PM

Walaupun Notepad tidak dapat menjalankan kod Java secara langsung, ia dapat dicapai dengan menggunakan alat lain: menggunakan pengkompil baris arahan (Javac) untuk menghasilkan fail bytecode (fileName.class). Gunakan Java Interpreter (Java) untuk mentafsir bytecode, laksanakan kod, dan output hasilnya.

Apa itu vscode untuk apa vscode? Apa itu vscode untuk apa vscode? Apr 15, 2025 pm 06:45 PM

VS Kod adalah nama penuh Visual Studio Code, yang merupakan editor kod dan persekitaran pembangunan yang dibangunkan oleh Microsoft. Ia menyokong pelbagai bahasa pengaturcaraan dan menyediakan penonjolan sintaks, penyiapan automatik kod, coretan kod dan arahan pintar untuk meningkatkan kecekapan pembangunan. Melalui ekosistem lanjutan yang kaya, pengguna boleh menambah sambungan kepada keperluan dan bahasa tertentu, seperti debuggers, alat pemformatan kod, dan integrasi Git. VS Kod juga termasuk debugger intuitif yang membantu dengan cepat mencari dan menyelesaikan pepijat dalam kod anda.

Boleh vscode digunakan untuk mac Boleh vscode digunakan untuk mac Apr 15, 2025 pm 07:36 PM

VS Kod boleh didapati di Mac. Ia mempunyai sambungan yang kuat, integrasi git, terminal dan debugger, dan juga menawarkan banyak pilihan persediaan. Walau bagaimanapun, untuk projek yang sangat besar atau pembangunan yang sangat profesional, kod VS mungkin mempunyai prestasi atau batasan fungsi.

Cara memeriksa alamat gudang git Cara memeriksa alamat gudang git Apr 17, 2025 pm 01:54 PM

Untuk melihat alamat repositori Git, lakukan langkah -langkah berikut: 1. Buka baris arahan dan navigasi ke direktori repositori; 2. Jalankan perintah "Git Remote -V"; 3. Lihat nama repositori dalam output dan alamat yang sepadan.

Seni Bina Linux: Melancarkan 5 Komponen Asas Seni Bina Linux: Melancarkan 5 Komponen Asas Apr 20, 2025 am 12:04 AM

Lima komponen asas sistem Linux adalah: 1. Kernel, 2. Perpustakaan Sistem, 3. Utiliti Sistem, 4. Antara Muka Pengguna Grafik, 5. Aplikasi. Kernel menguruskan sumber perkakasan, Perpustakaan Sistem menyediakan fungsi yang telah dikompilasi, utiliti sistem digunakan untuk pengurusan sistem, GUI menyediakan interaksi visual, dan aplikasi menggunakan komponen ini untuk melaksanakan fungsi.

Cara menggunakan vscode Cara menggunakan vscode Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCode) adalah editor cross-platform, sumber terbuka dan editor kod percuma yang dibangunkan oleh Microsoft. Ia terkenal dengan ringan, skalabilitas dan sokongan untuk pelbagai bahasa pengaturcaraan. Untuk memasang VSCode, sila lawati laman web rasmi untuk memuat turun dan jalankan pemasang. Apabila menggunakan VSCode, anda boleh membuat projek baru, edit kod, kod debug, menavigasi projek, mengembangkan VSCode, dan menguruskan tetapan. VSCode tersedia untuk Windows, MacOS, dan Linux, menyokong pelbagai bahasa pengaturcaraan dan menyediakan pelbagai sambungan melalui pasaran. Kelebihannya termasuk ringan, berskala, sokongan bahasa yang luas, ciri dan versi yang kaya

See all articles