$ tidur 100 &[1] 9298
menggunakan
pidofAnda dapat melihat ID proses dari nama program yang ditentukan:
$ pidof tidur9298
$ kucing /proc/9298/maps08048000-0804b000 r-xp 00000000 08:01 977399 /bin/sleep0804b000-0804c000 rw -p 00003000 08:01 977399 /bin/sleep0804c000-0806d000 rw-p 0804c000 00:00 0 [heap]b7c8b000-b7cca000 r--p 00000000 08:01 443354...bfbd8000-bfbed000 rw-p bfbd8000 00:00 0 [tumpukan]ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
Setelah program dijalankan, program tersebut dimuat ke dalam memori dan menjadi suatu proses. Gambar di atas menunjukkan gambar memori (memori virtual) dari proses, termasuk instruksi program, data, dan beberapa ruang tumpukan yang digunakan untuk menyimpan parameter baris perintah program dan variabel lingkungan. Ruang tumpukan yang digunakan untuk aplikasi memori dinamis telah dialokasikan.
Untuk rincian tentang proses eksekusi program pada baris perintah, silakan merujuk ke "Momen eksekusi program di bawah baris perintah Linux".
Sebenarnya ada cara lain untuk membuat suatu proses, yaitu membiarkan program berjalan. Misalnya, melalui beberapa konfigurasi, Anda dapat memulai program secara otomatis saat sistem dijalankan (untuk detailnya, lihat
pria init), atau dengan mengonfigurasi
crond(atau
pada) untuk membiarkannya memulai program secara teratur. Selain itu, ada cara lain yaitu dengan menulis skrip Shell dan menulis program ke dalam file skrip. Ketika file skrip dijalankan, maka program di dalam file tersebut akan dieksekusi dan menjadi sebuah proses. Detail metode ini tidak akan diperkenalkan. Mari pelajari cara melihat properti proses.
Satu hal yang perlu ditambahkan adalah: untuk menjalankan program di bawah baris perintah, Anda bisa lewat
ulimitPerintah bawaan digunakan untuk mengatur sumber daya yang dapat dimanfaatkan oleh suatu proses, seperti jumlah maksimum deskriptor file yang dapat dibuka suatu proses, ruang tumpukan maksimum, ruang memori virtual, dll. Untuk penggunaan khusus, lihat
membantu batas.
bisa lewat
PSGunakan perintah untuk melihat atribut dan status terkait proses. Informasi ini mencakup pengguna yang memiliki proses tersebut, program yang terkait dengan proses tersebut, dan
CPUdan penggunaan memori dan informasi lainnya. Pemahaman tentang cara melihatnya dapat membantu analisis statistik yang relevan dan operasi lainnya.
Lihat properti dari semua proses saat ini dalam sistem:
$ ps -ef
Melihat proses yang sesuai dengan program yang mengandung karakter tertentu dalam perintah, proses
PENGENALadalah 1.
TTYuntuk? Menunjukkan bahwa itu tidak terkait dengan terminal:
$ ps -C init PID TTY WAKTU CMD 1 ?
Pilih proses yang dimulai oleh pengguna tertentu:
$ ps -U elang
Keluarkan konten yang ditentukan sesuai dengan format yang ditentukan. Berikut ini keluaran nama perintah dan
CPUTingkat penggunaan:
$ ps -e -o %C %c
Mencetak
CPU4 program teratas yang paling banyak digunakan:
$ ps -e -o %C %c |. urutkan -u -k1 -r |. kepala -5 7.5 firefox-bin 1.1 Xorg 0.8 scim-panel-gtk 0.2 scim-bridge
Dapatkan lima proses menggunakan memori virtual terbesar:
$ ps -e -o %z %c |. urutkan -n -k1 -r |. kepala -5349588 firefox-bin 96612 terminal xfce4 88840 xfdesktop 76332 gedit 58920 scim-panel-gtk
Ada hubungan “kekerabatan” antara semua proses dalam sistem, yang bisa saja terjadi
ptreeLihatlah hubungan ini:
$ pstree
Pohon panggilan proses sistem akan dicetak di atas, dan Anda dapat dengan jelas melihat hubungan panggilan antara semua proses aktif di sistem saat ini.
$ atas
Fitur terbesar dari perintah ini adalah ia dapat melihat informasi proses secara dinamis, tentu saja, ia juga menyediakan beberapa parameter lain, seperti
-SAnda dapat mengurutkan dan melihatnya berdasarkan waktu eksekusi kumulatif, atau Anda dapat menggunakan
-kamuLihat proses yang dimulai oleh pengguna tertentu, dll.
Mengisi kembali:
atasPerintahnya mendukung interaktif, misalnya mendukung
kamuPerintah ini menampilkan semua proses pengguna dan mendukung passing
kPerintah untuk mematikan suatu proses;
-n 1opsi untuk mengaktifkan mode pemrosesan batch, penggunaan spesifiknya adalah:
$ atas -n 1 -b
Mari kita bahas masalah yang menarik: Bagaimana membuat hanya satu program yang berjalan pada waktu yang bersamaan.
Artinya ketika suatu program sedang dijalankan, program tersebut tidak dapat dijalankan lagi. Jadi apa yang harus dilakukan?
Jika program yang sama disalin ke dalam banyak salinan dan memiliki nama file yang berbeda serta ditempatkan di lokasi yang berbeda, ini akan menjadi lebih buruk, jadi pertimbangkan kasus yang paling sederhana, yaitu program ini unik di seluruh sistem, dan namanya juga unik. . Dalam hal ini, apa saja cara untuk menjawab pertanyaan di atas?
Mekanisme umumnya adalah: periksa di awal program apakah sudah dieksekusi. Jika sudah dijalankan, hentikan, jika tidak lanjutkan eksekusi kode berikutnya.
Strateginya beragam. Karena asumsi sebelumnya telah menjamin keunikan nama file program dan kode, maka lewati
PSPerintah tersebut mencari nama program yang sesuai dengan semua proses saat ini dan membandingkannya dengan nama programnya satu per satu. Jika sudah ada, berarti sudah dijalankan.
ps -e -o %c |.tr -d |. grep -q ^init$ #Periksa apakah program saat ini dijalankan [ $? -eq 0 ] && exit #Jika ya, maka exit, $? berhasil dieksekusi
Setiap kali dijalankan, periksa terlebih dahulu apakah ada proses yang menyimpan dirinya di lokasi yang ditentukan.
PENGENALfile, jika tidak ada, lanjutkan eksekusi, jika ada, lihat prosesnya
PENGENALApakah berjalan? Jika ya, keluar, jika tidak, tulis ulang proses baru ke file.
PENGENAL, dan lanjutkan.
pidfile=/tmp/$0.pidif [ -f $pidfile ]; lalu OLDPID=$(cat $pidfile) ps -e -o %p |.grep -q ^$OLDPID$ [ $? && exitfiecho $$ > $pidfile#... Kode isi# Atur aksi sinyal 0. Ketika program keluar, sinyal dipicu untuk menghapus jebakan file sementara rm $pidfile 0
Jangan ragu untuk menggunakan lebih banyak strategi penerapan sendiri!
Selain memastikan bahwa setiap proses dapat dijalankan dengan lancar, untuk memungkinkan tugas-tugas tertentu diselesaikan terlebih dahulu, sistem akan menggunakan metode penjadwalan tertentu saat menjadwalkan proses, seperti algoritma penjadwalan umum rotasi irisan waktu berdasarkan prioritas. Dalam hal ini, Anda bisa lulus
reniceMenyesuaikan prioritas program yang sedang berjalan, misalnya: `
$ ps -e -o %p %c %n |.grep xfs 5089 xfs 0
$ renice 1 -p 5089renice: 5089: setpriority: Operasi tidak diizinkan$ sudo renice 1 -p 5089 #Izin diperlukan [sudo] kata sandi untuk falcon:5089: prioritas lama 0, prioritas baru 1$ ps -e -o %p % c %n |.grep xfs #Lihat lagi, prioritasnya telah disesuaikan 5089 xfs 1
Karena Anda dapat menjalankan suatu program dan membuat proses melalui baris perintah, ada juga cara untuk mengakhirinya. bisa lewat
membunuhPerintah tersebut mengirimkan sinyal ke proses yang dimulai oleh pengguna untuk menghentikan proses, tentu saja, ini bersifat "universal".
akarhampir
membunuhSemua proses (kecuali
inisiasidi luar). Misalnya,
$ tidur 50 & #Mulai proses [1] 11347$ bunuh 11347
membunuhPerintah akan mengirimkan sinyal penghentian secara default (
SIGTERM) ke program dan biarkan program keluar, tapi
membunuhSinyal lain juga dapat dikirim dan ini dapat ditentukan melalui
sinyal pria 7Anda juga dapat melihatnya melalui
bunuh -lBuat daftarnya.
$ man 7 signal$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15 ) SIGTERM 16) SIGSTKFLT17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+439) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+1247) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-1451) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-1055) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-659) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX
Misalnya, gunakan
membunuhperintah untuk mengirim
SIGSTOPMemberi sinyal pada program untuk dijeda lalu dikirim
SIGCONTSinyalnya tetap berjalan.
$ sleep 50 &[1] 11441$ jobs[1]+ Running sleep 50 &$ kill -s SIGSTOP 11441 #Ini sama dengan kita melakukan operasi CTRL+Z pada proses latar depan $ jobs[1]+ Stop sleep 50$ kill - s SIGCONT 11441 #Ini setara dengan operasi bg %1 sebelumnya yang kami gunakan untuk menjalankan proses latar belakang $ jobs[1]+ Running sleep 50 &$ kill %1 #Di bawah sesi saat ini, Anda juga dapat mengontrol proses melalui nomor pekerjaan $ jobs[1]+ Dihentikan tidur 50
bisa dilihat
membunuhPerintah tersebut memberikan fungsi yang sangat baik, tetapi hanya dapat didasarkan pada proses
PENGENALatau pekerjaan untuk mengontrol proses, sementara
membunuhDan
membunuh semuaTersedia lebih banyak opsi yang memperluas cara untuk mengontrol suatu proses berdasarkan nama programnya atau bahkan nama penggunanya. Silakan merujuk ke manual mereka untuk penggunaan lebih lanjut.
Ketika program keluar, bagaimana cara menentukan apakah program keluar secara normal atau tidak normal? Masih ingat klasik di Linux itu?
halo duniaProgram? Di akhir kode selalu ada baris
kembali 0penyataan. ini
kembali 0Ini sebenarnya memungkinkan pemrogram memeriksa apakah proses keluar secara normal. Jika proses mengembalikan nilai yang berbeda, maka dapat dikatakan bahwa proses tersebut keluar secara tidak normal karena belum dieksekusi.
kembali 0Pernyataan ini keluar.
Jadi bagaimana cara memeriksa status keluar dari proses, yaitu nilai yang dikembalikan?
ada
Kerang, Anda dapat memeriksa variabel khusus ini
$?, yang menyimpan status keluar setelah perintah sebelumnya dijalankan.
$ test1bash: test1: perintah tidak ditemukan$ echo $?127$ cat ./test.c | grep hello$ echo $?1$ cat ./test.c |. grep hi printf(hai, saya sendiri!n);$ echo $?0
Nampaknya mengembalikan 0 sudah menjadi aturan yang tidak terucapkan, walaupun belum ada standar yang mengaturnya secara jelas, namun ketika program kembali normal, program tersebut selalu dapat dikembalikan
$?0 terdeteksi di , tetapi bila tidak normal, nilai selain 0 selalu terdeteksi. Ini memberi tahu kita bahwa di akhir program yang terbaik adalah mengikuti
keluar 0sehingga siapa pun dapat lulus ujian
$?Tentukan apakah program berakhir secara normal. Jika suatu hari, seseorang sesekali menggunakan program Anda dan mencoba memeriksa status keluarnya, tetapi Anda mengembalikan a
-1Atau 1, maka dia akan sangat tertekan dan bertanya-tanya di mana masalahnya dalam program yang dia tulis sendiri. Dia akan memeriksanya untuk waktu yang lama tetapi bingung karena dia sangat mempercayai Anda sehingga dia tidak pernah meragukan kebiasaan pemrograman Anda awal hingga akhir. Ini akan berbeda!
Untuk memudahkan desain dan implementasi, suatu tugas besar biasanya dibagi menjadi modul-modul yang lebih kecil. Modul yang berbeda menjadi proses setelah dimulai. Bagaimana mereka berkomunikasi satu sama lain untuk bertukar data dan bekerja sama? Banyak metode yang disebutkan dalam buku "Pemrograman Tingkat Lanjut di Lingkungan UNIX", seperti pipa (pipa tanpa nama dan pipa bernama), sinyal (
sinyal), pesan (
Pesan) antrian (antrian pesan), memori bersama (
mmap/munmap), semafor (
tiang sinyal, terutama digunakan untuk sinkronisasi, antar proses, antar thread berbeda dalam suatu proses), soket (
Stopkontak, mendukung proses komunikasi antara mesin yang berbeda), dll., dan di Shell, pipa dan sinyal biasanya langsung digunakan. Berikut ini terutama diperkenalkan beberapa penggunaan pipa dan mekanisme sinyal dalam pemrograman Shell.
Di Linux, Anda bisa lulus
|Hubungkan dua program sehingga Anda dapat menggunakannya untuk menghubungkan input dari program terakhir ke output dari program sebelumnya, sehingga jelas disebut pipa. Dalam bahasa C, sangat sederhana dan nyaman untuk membuat pipa tanpa nama
pipafungsi, meneruskan dua elemen
ke dalamTipe array bisa digunakan. Array ini sebenarnya menyimpan dua deskriptor file. Setelah proses induk menulis sesuatu ke deskriptor file pertama, proses anak dapat membacanya dari deskriptor file pertama.
Jika Anda menggunakan terlalu banyak baris perintah, pipa ini
|Ini harus sering digunakan. Misalnya ada demonstrasi di atas
PSOutput dari perintahnya adalah sebagai
memahamiMasukan perintah:
$ ps -ef |.grep init
Anda mungkin berpikir bahwa "pipa" ini sangat ajaib sehingga dapat menghubungkan input dan output dari dua program. Faktanya, ketika serangkaian perintah tersebut dimasukkan, shell saat ini akan melakukan penguraian yang sesuai, mengaitkan output dari proses sebelumnya dengan deskriptor file output dari pipa, dan mengaitkan input dari proses selanjutnya dengan deskriptor file input dari pipa. Proses asosiasi ini Redirect fungsi melalui input dan output
dup(atau
fcntl) untuk mencapai.
Pipa bernama sebenarnya adalah sebuah file (pipa tanpa nama juga seperti file. Meskipun terkait dengan dua deskriptor file, ia hanya dapat dibaca di satu sisi dan ditulis di sisi lain). harus memenuhi first-in-first-out selama operasi, dan, Jika Anda mencoba membaca dari pipa bernama yang tidak memiliki konten, Anda akan diblokir. Demikian pula, jika Anda mencoba menulis ke pipa bernama dan tidak ada program yang sedang mencoba untuk membacanya, Anda akan diblokir. Lihat efeknya di bawah ini.
$ mkfifo fifo_test #Buat pipa terkenal melalui perintah mkfifo $ echo somefefe > fifo_test #Mencoba menulis konten ke file fifo_test, tetapi diblokir. Anda perlu membuka terminal lain untuk melanjutkan operasi berikut $ cat fifo_test #Buka terminal lain , ingat, Buka yang lain. Mencoba membacakan isi fifo_test somefefe
Ini dia
gemaDan
kucingadalah dua program yang berbeda, dalam hal ini, oleh
gemaDan
kucingTidak ada hubungan orangtua-anak antara dua proses yang dimulai. Namun, mereka masih dapat berkomunikasi melalui pipa bernama.
Metode komunikasi seperti ini sangat cocok untuk situasi tertentu: misalnya, ada arsitektur seperti itu yang terdiri dari dua aplikasi, salah satunya terus membaca melalui satu lingkaran.
fifo_testkonten untuk menentukan apa yang harus dilakukan selanjutnya. Jika pipa ini tidak memiliki konten, maka pipa tersebut akan diblokir di sana tanpa menghabiskan sumber daya karena loop tak terbatas.
fifo_testTulis beberapa informasi kontrol ke dalamnya untuk memberi tahu program sebelumnya apa yang harus dilakukan. Tuliskan contoh yang sangat sederhana di bawah ini. Anda dapat merancang beberapa kode kontrol, dan kemudian program kontrol berlanjut
fifo_testTulis di dalamnya, lalu aplikasi menyelesaikan tindakan berbeda berdasarkan kode kontrol ini. Tentu saja, Anda juga bisa mengunjunginya
fifo_testMasukkan data lain kecuali kode kontrol.
kode aplikasi
$ cat app.sh #!/bin/bash FIFO=fifo_test while :; do CI=`cat $FIFO` #CI --> Info Kontrol case $CI di 0) echo Nomor CONTROL adalah NOL, lakukan sesuatu ... ;; 1) echo Nomor CONTROLnya SATU, lakukan sesuatu... ;; *) echo Nomor CONTROL tidak dikenali, lakukan yang lain... ;;
Kontrol kode program
$ cat control.sh #!/bin/bash FIFO=fifo_test CI=$1 [ -z $CI ] && echo info kontrol tidak boleh kosong && exit echo $CI > $FIFO
Satu program mengontrol kerja program lain melalui pipa
$ chmod +x app.sh control.sh #Modifikasi izin eksekusi kedua program ini sehingga pengguna dapat menjalankannya $ ./app.sh #Mulai aplikasi ini di terminal dan kirim kontrol melalui ./control.sh Periksa hasilnya setelah kodenya. Nomor CONTROLnya SATU, lakukan yang lain... #Setelah mengirim 1, Nomor CONTROLnya NOL, lakukan sesuatu... #Setelah mengirim 0, Nomor CONTROL tidak dikenali, lakukan yang lain... #Kirim yang tidak diketahui Setelah kode kontrol $ ./control.sh 1 #Di terminal lain, kirim informasi kontrol untuk mengontrol pekerjaan aplikasi $ ./control.sh 0 $ ./control.sh 4343
Arsitektur aplikasi seperti ini sangat cocok untuk desain tugas multi-program lokal
cgi web, maka itu juga akan sesuai dengan persyaratan kendali jarak jauh. memperkenalkan
cgi webSatu-satunya perubahan adalah program kontrolnya
./control.shmasukkan
webdari
cgidirektori dan buat beberapa modifikasi agar sesuai
CGIspesifikasi, yang mencakup representasi format keluaran dokumen (perlu dikeluarkan di awal file
konten-tpye: teks/htmldan baris kosong) dan perolehan parameter masukan
(webParameter input disimpan di
QUERY_STRINGvariabel lingkungan). Jadi sangat sederhana
CGIProgram kendalinya dapat ditulis seperti ini:
#!/bin/bashFIFO=./fifo_testCI=$QUERY_STRING[ -z $CI ] && echo info kontrol tidak boleh kosong && exitecho -e tipe konten: text/htmlnnecho $CI > $FIFO
Dalam penggunaan sebenarnya, harap pastikan
kontrol.shdapat mengakses
fifo_testpipa, dan memiliki izin menulis untuk kontrol melalui browser
aplikasi.sh:
http://ipaddress_or_dns/cgi-bin/control.sh?0
tanda tanya
?Konten berikut adalah
QUERY_STRING, mirip dengan sebelumnya
$1.
Penerapan seperti ini memiliki arti praktis yang besar untuk kendali jarak jauh, khususnya kendali jarak jauh pada sistem tertanam. Pada kursus musim panas tahun lalu, kami menerapkan kendali motor jarak jauh dengan cara ini. Pertama, aplikasi sederhana diimplementasikan untuk mengontrol putaran motor, termasuk kontrol kecepatan, arah, dll. Untuk mencapai kendali jarak jauh, kami merancang beberapa kode kontrol untuk mengontrol berbagai properti yang terkait dengan putaran motor.
Dalam bahasa C, jika ingin menggunakan pipa bernama, mirip dengan Shell, hanya saja saat membaca dan menulis data, gunakan
membaca,
menulisPanggil, buat
fifoDigunakan kapan
mkfifopanggilan fungsi.
Sinyal adalah interupsi perangkat lunak yang dapat diakses oleh pengguna Linux
membunuhPerintah tersebut mengirimkan sinyal tertentu ke suatu proses, atau beberapa sinyal dapat dikirim melalui keyboard, seperti
CTRL+Cmungkin memicu
SGIINTsinyal, sementara
CTRL+mungkin memicu
SGIQUITSinyal, dll. Selain itu, kernel juga akan mengirimkan sinyal ke proses dalam keadaan tertentu, seperti ketika mengakses memori di luar batas.
SGISEGVSinyal, tentu saja, dan proses itu sendiri juga bisa lewat
membunuh,
mengangkatTunggu hingga fungsi mengirimkan sinyal ke dirinya sendiri. Untuk jenis sinyal yang didukung di Linux, Anda dapat meneruskannya
sinyal pria 7atau
bunuh -lLihat daftar dan instruksi terkait.
Untuk beberapa sinyal, proses akan memiliki tindakan respons default, sedangkan untuk beberapa sinyal, proses mungkin mengabaikannya begitu saja. Tentu saja, pengguna juga dapat mengatur fungsi pemrosesan khusus untuk sinyal tertentu. Di shell, Anda bisa lewat
perangkapperintah (perintah bawaan Shell) untuk mengatur tindakan sebagai respons terhadap sinyal (perintah atau fungsi yang ditentukan), dan dalam bahasa C Anda dapat menggunakan
sinyalPanggil fungsi pengendali yang terdaftar untuk suatu sinyal. Ini hanya demonstrasi
perangkapPenggunaan perintah.
$ function signal_handler { echo hello, world.; } #Tentukan fungsi signal_handler $ trap signal_handler SIGINT #Jalankan pengaturan perintah ini: cetak hello, world ketika menerima sinyal SIGINT $ hello, world #Tekan CTRL+C untuk melihat layar hello dan string dunia adalah keluaran
Demikian pula, jika Anda menyetel tindakan respons sinyal 0, Anda dapat menggunakannya
perangkapUntuk mensimulasikan program bahasa C
atexitPendaftaran fungsi penghentian program, yaitu melalui
perangkap signal_handler SIGQUITmengatur
penangan_sinyalFungsi tersebut akan dijalankan ketika program keluar. Sinyal 0 adalah sinyal khusus masuk
POSIX.1Sinyal nomor 0 didefinisikan sebagai sinyal nol, yang sering digunakan untuk menentukan apakah suatu proses tertentu masih ada. Sinyal ini dipicu ketika suatu program keluar.
$ cat sigexit.sh#!/bin/bashfunction signal_handler { echo hello, world}trap signal_handler 0$ chmod +x sigexit.sh$ ./sigexit.sh #Pemrograman Shell sebenarnya akan menggunakan metode ini untuk melakukan pembersihan ketika program keluar Menyelesaikan pekerjaan pada file sementara halo, dunia
Saat kami meneruskan banyak perintah
|,>,<, ;, (,)Ketika digabungkan bersama-sama, rangkaian perintah ini biasanya memulai beberapa proses yang berkomunikasi melalui pipa, dll. Terkadang saat menjalankan suatu tugas, ada tugas lain yang perlu diproses, sehingga sering kali Anda menambahkan tanda & di akhir urutan perintah, atau setelah menjalankan perintah, tekan
CTRL+ZMenyebabkan perintah sebelumnya dijeda. untuk melakukan tugas lainnya. Setelah menyelesaikan beberapa tugas lainnya, lulus
fgPerintah ini mengalihkan tugas latar belakang ke latar depan. Proses pengendalian seperti ini biasanya disebut pengendalian pekerjaan, dan rangkaian perintah tersebut disebut pekerjaan. Pekerjaan ini mungkin melibatkan satu atau lebih program, satu atau lebih proses. Berikut ini menunjukkan beberapa operasi kontrol pekerjaan yang umum digunakan.
$ tidur 50 &[1] 11137
Gunakan perintah bawaan Shell
fgBawa pekerjaan 1 ke latar depan dan tekan
CTRL+ZJeda prosesnya
$ fg %1tidur 50^Z[1]+ Berhenti tidur 50
$ pekerjaan # Periksa status pekerjaan saat ini, satu pekerjaan dihentikan [1] + Berhenti tidur 50$ tidur 100 & # Biarkan pekerjaan lain berjalan di latar belakang [2] 11138$ pekerjaan # Periksa status pekerjaan saat ini, satu sedang berjalan dan satu lagi dihentikan [ 1]+ Menghentikan tidur 50[2]- Menjalankan tidur 100 &
$ bg %1[2]+ tidur 50 &
Namun, untuk menggunakan kontrol pekerjaan di bawah baris perintah, shell saat ini, driver terminal kernel, dll. perlu mendukung kontrol pekerjaan.
"Pemrograman Tingkat Lanjut di Lingkungan UNIX"