Apa perbedaan antara pekerjaan dan proses?

Jawaban:

46

Suatu proses adalah semua program yang sedang berjalan dengan ruang alamatnya sendiri.

Pekerjaan adalah konsep yang digunakan oleh shell - program apa pun yang Anda mulai secara interaktif yang tidak terlepas (yaitu, bukan daemon) adalah pekerjaan. Jika Anda menjalankan program interaktif, Anda dapat menekan CtrlZuntuk menangguhkannya. Kemudian Anda bisa memulainya kembali di latar depan (menggunakan fg) atau di latar belakang (menggunakan bg).

Saat program ditunda atau berjalan di latar belakang, Anda dapat memulai program lain - Anda akan menjalankan dua pekerjaan. Anda juga dapat memulai program berjalan di latar belakang dengan menambahkan sebuah "&" seperti ini: program &. Program itu akan menjadi pekerjaan latar belakang. Untuk daftar semua pekerjaan yang Anda jalankan, Anda dapat menggunakan jobs.

Untuk informasi lebih lanjut tentang pekerjaan, lihat bagian halaman bash man ini.

Shawn J. Goff
sumber
Dalam contoh di atas, ketika kita memiliki 2 pekerjaan berjalan, kita juga memiliki 2 proses yang berjalan , bukan? Bisakah Anda menguraikan makna ruang alamatnya sendiri ? Dalam hal mana suatu program tidak memiliki ruang alamatnya sendiri?
Kenny
@ Kenny ya, pekerjaan-pekerjaan tro itu juga akan menjadi proses. Padahal, setiap pekerjaan adalah proses. Pekerjaan terkait dengan sesi dia akan Anda. Setiap proses yang Anda mulai yang tidak terlepas dari tty Anda adalah pekerjaan.
Shawn J. Goff
@ Kenny, sejauh proses, ketika saya mengatakan program, itu adalah hal yang sangat umum - seperangkat instruksi yang dipesan untuk dijalankan oleh CPU. Ini juga disebut tugas atau utas eksekusi. Suatu proses dapat membuat utas lain yang berbagi ruang alamatnya.
Shawn J. Goff
1
perintah pipa seperti in ls | sortadalah pekerjaan, tetapi setiap perintah berjalan sebagai proses turunan dari proses subkulit yang berbeda. Ini adalah contoh pekerjaan yang terdiri dari beberapa proses. Bagaimana definisi Anda tentang suatu pekerjaan dapat menjelaskan bahwa suatu pekerjaan dapat terdiri dari beberapa proses?
Tim
30

UNIX memiliki konsep terpisah "proses", "kelompok proses", dan "sesi".

Setiap shell yang Anda dapatkan saat login menjadi pemimpin sesi baru dan grup prosesnya sendiri, dan mengatur grup proses kontrol terminal ke dirinya sendiri.

Shell membuat grup proses dalam sesi saat ini untuk setiap "pekerjaan" yang diluncurkannya, dan menempatkan setiap proses yang dimulai ke grup proses yang sesuai. Misalnya, ls | headadalah saluran pipa dari dua proses, yang shell anggap sebagai pekerjaan tunggal, dan akan menjadi milik satu grup proses baru.

Suatu proses adalah (kumpulan) utas eksekusi dan konteks lainnya, seperti ruang alamat dan tabel deskriptor file. Suatu proses dapat memulai proses lain; proses-proses baru ini akan menjadi milik kelompok proses yang sama dengan induk kecuali jika tindakan lain diambil. Setiap proses mungkin juga memiliki "terminal pengontrol", yang dimulai dari yang sama dengan induknya.

Shell memiliki konsep pekerjaan "foreground" dan "latar belakang". Pekerjaan latar depan adalah grup proses dengan kontrol terminal, dan pekerjaan latar belakang adalah grup proses tanpa kontrol terminal.

Setiap terminal memiliki grup proses latar depan. Saat membawa pekerjaan ke latar depan, shell menetapkannya sebagai grup proses latar depan terminal; saat meletakkan pekerjaan ke latar belakang, shell menetapkan grup proses latar depan terminal ke grup proses lain atau dirinya sendiri.

Proses dapat membaca dari dan menulis ke terminal pengendali mereka jika mereka berada di grup proses latar depan. Kalau tidak, mereka menerima SIGTTINdan SIGTTOUmemberi sinyal pada upaya untuk membaca dan menulis masing-masing ke terminal. Secara default sinyal-sinyal ini menunda proses, meskipun sebagian besar shell menutupi SIGTTOUsehingga pekerjaan latar belakang dapat menulis ke terminal tanpa gangguan.

singkat
sumber
1
Ini adalah gambaran ringkas dan bagus tentang manajemen proses terminal dan shell. Ini dapat ditingkatkan dengan menyebutkan bahwa "pekerjaan" adalah "pipa", yang dapat lebih dari satu proses yang dihubungkan bersama dalam suatu kelompok proses.
Chris Page
1

Dalam komputasi, suatu Pekerjaan adalah unit kerja atau unit eksekusi (yang melakukan pekerjaan tersebut). Komponen pekerjaan (sebagai unit kerja) disebut tugas atau langkah (jika berurutan, seperti dalam aliran pekerjaan). Sebagai unit pelaksanaan, suatu pekerjaan dapat secara konkret diidentifikasi dengan satu proses tunggal, yang pada gilirannya dapat memiliki subproses (proses anak; proses yang sesuai dengan pekerjaan menjadi proses induk) yang melakukan tugas atau langkah yang terdiri dari pekerjaan pekerjaan; atau dengan kelompok proses; atau dengan referensi abstrak ke proses atau grup proses, seperti dalam kontrol pekerjaan Unix.

Sumber

contoh yang bagus

Premraj
sumber
-1

Definisi di atas sangat teknis tetapi mungkin op ingin klarifikasi lebih dari hari ke hari. Saya pikir pekerjaan adalah proses yang dijadwalkan. Ketika kita berurusan dengan proses secara umum tidak selalu ada gagasan tentang jadwal, tetapi ketika kita menggunakan kata "pekerjaan" kita selalu berarti bahwa itu dijadwalkan, atau berulang seperti lingkaran, itu seperti seorang pekerja.

eloone
sumber
1
Tolong jelaskan suara turun jika Anda ingin memilih turun. Jika jawaban ini tidak benar, setidaknya jelaskan mengapa menurut Anda itu tidak benar. Sampai sekarang saya masih berpikir jawaban saya masuk akal, itu adalah jenis penjelasan yang saya cari.
eloone
Saya setuju bahwa orang yang menolak harus menjelaskan alasannya. Tapi saya pikir alasan untuk downvote adalah bahwa definisi Anda tentang "pekerjaan" tidak benar.
prograde
Mau jelaskan kenapa itu tidak benar? "Pekerjaan" tidak jelas didefinisikan seperti apa "proses" itu (dengan PID dalam sistem). Dalam pengalaman saya, "pekerjaan" selalu merupakan kata yang digunakan untuk menentukan jenis proses tertentu yang sering dijadwalkan, dan di latar belakang, dan yang dapat Anda luncurkan. Itu sebabnya sulit untuk didefinisikan karena penggunaan mendefinisikannya. Bisa juga berupa sekelompok proses, tetapi begitu juga "wadah" (LXC), tetapi "wadah" bukanlah "pekerjaan". Proses yang diluncurkan seperti "nginx" juga bukan "pekerjaan". Komentar saya masih menambah jawaban. Sekali lagi, ini menjawab apa yang saya coba pahami.
eloone
Saya juga masih mencari definisi yang tepat, jadi saya minta maaf, saya belum bisa menjawab (belum). Tetapi apa yang tidak benar, adalah bahwa itu harus dijadwalkan.
prograde