Menü
Ücretsiz
Kayıt
Ev  /  Firmware/ Linux'ta bir program nasıl çalıştırılır. Süreçler ve iş yönetimi Linux arka plan modu

Linux'ta bir program nasıl çalıştırılır. Süreçler ve iş yönetimi Linux arka plan modu

Linux terminal hizmeti varsayılan olarak tek görev modunda çalışır. Bu, fırlatılan herhangi bir ekibin terminal tamamlanana kadar bloke edeceği anlamına gelir. Bu yaklaşım, uzun yürütme süresi gerektiren programları çalıştırırken uygun değildir. Bu sorun iki şekilde çözülebilir: ek bir terminal penceresi açın ve içinde başka bir komut çalıştırın veya arka plan modunu kullanın. Linux da dahil olmak üzere mevcut tüm işletim sistemleri çoklu görev özelliğine sahiptir, bu da aynı anda birden fazla programı yürütme yeteneği anlamına gelir.

Komut satırı arayüzüne hemen erişebilmek için arka planda bir tugayı nasıl çalıştırabilirim? Koşmaya zorlanan bir mürettebata arka plan süreci denir. Arka plan işlemleri ekranda gösterilmez. Örneğin Apache HTTPD sunucusu web sayfalarını sunmak için arka planda çalışır. Bir kabuk komut dosyasını veya herhangi bir komutu düşük öncelik moduna geçirebilirsiniz. Bir görev (örneğin bir ekip veya komut dosyası), komut satırının sonuna "&" işareti eklenerek arka plana yerleştirilebilir. Bu ifade, komutu arka plana yerleştirir ve terminalde yer açar. Arka planda çalışan bir ekibe iş denir. Arka plan komutu çalışırken diğer komutların yürütülmesi mümkündür. Sözdizimi aşağıdaki gibidir:

komut & komut dosyası adı & /yol/komut/komut arg1 arg2 & komut-1 | komut-2 arg1 & komut-1 | komut-2 -arg1 -arg2 >/yol/giden/çıkış &

Programları arka planda terminal penceresini engellemeden çalıştırmak için özel “&” eğitmenini kullanmanız gerekir. Komut adını, seçenekleri ve giriş parametrelerini belirttikten sonra bu karakteri satırın en sonuna yerleştirin. Genel olarak bu dizi “komut_adı -seçenek giriş_parametresi &” şeklinde yazılabilir.

ls ~/* > ~/test-file.txt &
18960

Enter tuşuna bastıktan sonra program arka planda otomatik olarak başlayacaktır. Bu durumda, terminal aşağıdaki "[görev_numarası] işlem_tanımlayıcısı" içeriğini içeren bir satır görüntüleyecek ve sizden yeni bir komut girmenizi isteyecektir.

Linux'ta arka planda çalışan komutları bulun

Aşağıdaki komutu çalıştırın:

Veri çıkışı örneği:

find / -iname "*.c" 2> /dev/null > /tmp/output.txt & çalıştırılıyor
+ grep -R "hostNamed" çalıştırılıyor / 2> /dev/null > /tmp/grep.txt &

Sipariş tanımlayıcıları nerede?

Standart yayınlara ek olarak iş kimliklerine ilişkin işlem kimliklerini görüntülemek için -l seçeneğini iletin:

Veri çıkışı örneği:

7307 çalıştırılıyor find / -iname "*.c" 2> /dev/null > /tmp/output.txt &
+ 7324 grep -R "hostNamed" çalıştırılıyor / 2> /dev/null > /tmp/grep.txt &

Yalnızca işlem kimliklerini görüntülemek için şunu girin:

Veri çıkışı örneği:

Arka planda çalışan komutları çalıştırmayı durdurun

Bir işlemi zorla veya zarif bir şekilde sonlandırmak için kill komutunu kullanın. Sözdizimi aşağıdaki gibidir:

PID'yi öldür
-15 PID'yi öldür
-9 PID'yi öldür
killall işlemi-İsim-Burada
killall -15 süreç-Adı-Burada
killall -9 süreç-Adı-Burada

Linux'ta bir programı ön plan moduna döndürme

Linux, programları yalnızca arka planda çalıştırmanıza değil, aynı zamanda isterseniz onları normal yürütmeye döndürmenize de olanak tanır. Bunun için iki araç vardır: komut ( Ekip, ortak amaçlar ve çıkarlarla birleşmiş bir grup insandır.) fg ve % operatörü. Çabalarının prensibi son derece basittir. fg, iş numarasının parametre olarak belirtilmesini gerektirir ve operatörden hemen sonra boşluk olmadan % yerine kullanılmalıdır.

find / -name .ini 2> ~/results.txt &
19090
fg 1
bash: fg: görev sona erdi
+ Çıkış 1 find / -name .ini 2> ~/results.txt

Geçen sefer bash betiklerinde, dosya tanımlayıcılarında ve akış yönlendirmede giriş, çıkış ve hata akışlarıyla çalışmaktan bahsetmiştik. Artık kendinize ait bir şeyler yazacak kadar bilginiz var. Bash konusunda uzmanlaşmanın bu aşamasında, çalışan komut dosyalarının nasıl yönetileceği ve bunların başlatılmasının nasıl otomatikleştirileceği hakkında sorularınız olabilir.

Şu ana kadar komut satırına komut dosyası adlarını yazıp Enter'a bastık, bu da programların hemen çalışmasını sağladı, ancak komut dosyalarını çağırmanın tek yolu bu değil. Bugün bir betiğin Linux sinyalleriyle nasıl çalışabileceğinden, betikleri çalıştırmaya ve çalıştırırken yönetmeye yönelik farklı yaklaşımlardan bahsedeceğiz.

Linux Sinyalleri

Linux'ta sistem veya uygulamalar tarafından üretilen üç düzineden fazla sinyal vardır. Burada, komut satırı komut dosyalarını geliştirirken kesinlikle işinize yarayacak, en sık kullanılanların bir listesi bulunmaktadır.
Sinyal kodu
İsim
Tanım
1
SIGHUP
Terminalin kapatılması
2
İŞARET
Kullanıcının terminalden işlemi durdurma sinyali (CTRL + C)
3
SIGQUIT
Kullanıcının terminalden (CTRL + \) bir işlemi bellek dökümüyle durdurma sinyali
9
SIGKILL
Sürecin koşulsuz sonlandırılması
15
SİGTERM
Süreç sonlandırma isteği sinyali
17
SIGSTOP
Bir süreci askıya almaya zorlamak ancak sonlandırılmamasını sağlamak
18
SIGTSTP
Terminalden bir işlemi duraklatma (CTRL+Z) ancak kapatılmaması
19
SİGCONT
Daha önce durdurulmuş bir işlemin yürütülmesine devam etme

Bash kabuğu, terminali kapattığınızda bir SIGHUP sinyali alırsa çıkar. Çıkmadan önce, çalışan komut dosyaları da dahil olmak üzere, içinde çalışan tüm işlemlere bir SIGHUP sinyali gönderir.

SIGINT sinyali işlemin geçici olarak durmasına neden olur. Linux çekirdeği, işlemci zamanını kabuğa ayırmayı durdurur. Bu gerçekleştiğinde kabuk, süreçlere bir SIGINT sinyali göndererek bildirimde bulunur.

Bash betikleri bu sinyalleri kontrol etmez, ancak bunları tanıyabilir ve betiği sinyallerin neden olduğu sonuçlara hazırlamak için belirli komutları çalıştırabilirler.

Komut dosyalarına sinyal gönderme

Bash kabuğu, klavye kısayollarını kullanarak komut dosyalarına sinyal göndermenizi sağlar. Çalışan bir betiği geçici olarak durdurmanız veya çalışmasını sonlandırmanız gerektiğinde bu çok kullanışlı olur.

Bir işlemi sonlandırmak

CTRL + C tuş kombinasyonu bir SIGINT sinyali üretir ve bunu kabukta çalışan tüm işlemlere göndererek bunların sonlandırılmasına neden olur.

Shell'de aşağıdaki komutu çalıştıralım:

$uyku 100
Bundan sonra CTRL + C tuş kombinasyonuyla çalışmasını tamamlayacağız.


Bir işlemi klavyeden sonlandırma

Süreci geçici olarak durdurmak

CTRL + Z tuş kombinasyonu, işlemi askıya alan ancak sonlandırmayan SIGTSTP sinyalini üretir. Bu işlem hafızada kalır ve çalışmaya devam edilebilir. Komutu kabukta çalıştıralım:

$uyku 100
Ve CTRL + Z tuş kombinasyonunu kullanarak geçici olarak durdurun.


Süreci duraklat

Köşeli parantez içindeki sayı, kabuğun sürece atadığı iş numarasıdır. Kabuk, içinde çalışan işlemleri benzersiz numaralara sahip işler olarak ele alır. İlk işleme 1 numarası, ikincisine - 2 vb. atanır.

Kabuğa bağlı bir işi duraklatırsanız ve ondan çıkmaya çalışırsanız, bash bir uyarı verecektir.

Askıya alınan işleri aşağıdaki komutla görüntüleyebilirsiniz:

Not –l


Görev listesi

İşlem durumunu görüntüleyen S sütununda, askıya alınan işlemler için T görüntülenir. Bu, komutun askıya alındığını veya izleme durumunda olduğunu gösterir.

Askıya alınan bir işlemi sonlandırmak istiyorsanız kill komutunu kullanabilirsiniz. Bununla ilgili detayları okuyabilirsiniz.

Çağrısı şuna benziyor:

İşlem kimliğini öldür

Sinyal yakalama

Bir komut dosyasında Linux sinyal izlemeyi etkinleştirmek için trap komutunu kullanın. Betik bu komutu çağırırken belirtilen sinyali alırsa, onu bağımsız olarak işler, ancak kabuk böyle bir sinyali işlemez.

Trap komutu, betiğin, kabuk tarafından müdahale edilmeden işlenecek sinyallere yanıt vermesini sağlar.

Trap komutunun çağrılmasının, yürütülecek kodu ve engellemek istediğimiz sinyallerin boşluklarla ayrılmış bir listesini nasıl belirttiğini gösteren bir örneğe bakalım. Bu durumda bu yalnızca bir sinyaldir:

#!/bin/bash trap "echo " Trapped Ctrl-C"" SIGINT echo Bu bir test komut dosyasıdır count=1 while [ $count -le 10 ] do echo "Loop #$count" uyku 1 count=$(($ say + 1)) tamamlandı
Bu örnekte kullanılan trap komutu, klavyede Ctrl + C tuşlarına basılarak oluşturulabilen bir SIGINT sinyaliyle karşılaştığında bir metin mesajı yazdırır.


Sinyal yakalama

CTRL + C tuşlarına her basışınızda, komut dosyası, kabuğun onu sonlandırmasına izin vermek yerine, trace çağrılırken belirtilen echo komutunu çalıştırır.

Trap komutunu çağırırken EXIT sinyalinin adını kullanarak komut dosyası çıkış sinyalini kesebilirsiniz:

#!/bin/bash trap "echo Elveda..." ÇIKIŞ sayısı=1 while [ $count -le 5 ] do echo "Döngü #$count" uyku 1 count=$(($count + 1)) bitti


Komut dosyası çıkış sinyalinin kesilmesi

Betik normal olarak veya bir SIGINT sinyali nedeniyle çıktığında, kabuk echo komutunu kesecek ve yürütecektir.

Ele geçirilen sinyallerin değiştirilmesi ve müdahalenin iptal edilmesi

Betik tarafından yakalanan sinyalleri değiştirmek için trap komutunu yeni parametrelerle çalıştırabilirsiniz:

#!/bin/bash trap "echo "Ctrl-C sıkıştı."" SIGINT sayısı=1 while [ $count -le 5 ] do echo "Döngü #$count" uyku 1 sayısı=$(($count + 1) ) bitti trap "echo "tuzağı değiştirdim!"" SIGINT sayısı=1 while [ $count -le 5 ] do echo "İkinci Döngü #$count" uyku 1 count=$(($count + 1)) bitti


Sinyal yakalama modifikasyonu

Değişiklikten sonra sinyaller yeni bir şekilde işlenecektir.

Sinyal yakalama, trap komutunun çalıştırılması, çift çizgi ve sinyal adının geçirilmesiyle de iptal edilebilir:

#!/bin/bash trap "echo "Ctrl-C sıkıştı."" SIGINT sayısı=1 while [ $count -le 5 ] do echo "Döngü #$count" uyku 1 sayısı=$(($count + 1) ) tuzak yapıldı -- SIGINT echo "Tuzağı yeni kaldırdım" count=1 while [ $count -le 5 ] do echo "İkinci Döngü #$count" uyku 1 count=$(($count + 1)) bitti
Betik, trap iptal edilmeden önce bir sinyal alırsa, bunu geçerli trap komutunda belirtildiği şekilde işleyecektir. Senaryoyu çalıştıralım:

$ ./benim betiğim
Ve klavyede CTRL + C tuşlarına basın.


Sinyal, müdahale iptal edilmeden önce yakalandı.

CTRL + C tuşlarına ilk basış, komut dosyası yürütme sırasında, sinyal müdahalesinin etkin olduğu sırada gerçekleşti, dolayısıyla komut dosyası, sinyale atanan yankı komutunu yürüttü. Yürütme kancayı kaldırma komutuna ulaştıktan sonra CTRL + C komutu her zamanki gibi çalışarak betiği sonlandırdı.

Arka planda komut satırı komut dosyalarını çalıştırma

Bazen bash betiklerinin bir görevi tamamlaması uzun zaman alır. Ancak betiğin tamamlanmasını beklemeden komut satırında normal şekilde çalışabilmeniz gerekebilir. Uygulaması o kadar da zor değil.

ps komutunun çıkardığı işlemlerin listesini gördüyseniz, arka planda çalışan ve bir terminale bağlı olmayan işlemleri fark etmiş olabilirsiniz.
Aşağıdaki betiği yazalım:

#!/bin/bash count=1 while [ $count -le 10 ] uyku yapar 1 count=$(($count + 1)) tamamlandı
Adından sonra ve işareti (&) karakterini belirterek çalıştıralım:

$ ./myscipt &
Bu, arka plan işlemi olarak çalışmasına neden olacaktır.


Arka planda bir komut dosyası çalıştırma

Betik bir arka plan işleminde başlatılacak, tanımlayıcısı terminalde görüntülenecek ve yürütülmesi tamamlandığında bununla ilgili bir mesaj göreceksiniz.

Betiğin arka planda çalışmasına rağmen, mesajları STDOUT ve STDERR'ye göndermek için terminali kullanmaya devam ettiğini, yani çıkardığı metnin veya hata mesajlarının terminalde görüneceğini unutmayın.


Süreçlerin listesi

Bu yaklaşımla terminalden çıktığınızda arka planda çalışan script de çıkacaktır.

Komut dosyasının terminali kapattıktan sonra çalışmaya devam etmesini istiyorsanız ne olur?

Terminali kapatırken çıkmayan komut dosyalarını çalıştırma

Komut dosyaları, terminal oturumundan çıktıktan sonra bile arka plan işlemlerinde yürütülebilir. Bunu yapmak için nohup komutunu kullanabilirsiniz. Bu komut, işleme gönderilen SIGHUP sinyallerini engelleyerek bir programı çalıştırmanıza olanak tanır. Sonuç olarak işlem, başlatıldığı terminalden çıktığınızda bile yürütülecektir.

Betiğimizi çalıştırırken bu tekniği uygulayalım:

Nohup ./myscript &
Terminale verilecek olan budur.


Nohup takımı

Nohup komutu terminalden bir işlemin bağlantısını kaldırır. Bu, sürecin STDOUT ve STDERR'ye olan referanslarını kaybedeceği anlamına gelir. Betiğin verdiği veri çıktısını kaybetmemek için nohup, STDOUT ve STDERR'ye gelen mesajları otomatik olarak nohup.out dosyasına yönlendirir.

Aynı dizinden birden fazla komut dosyası çalıştırırsanız çıktılarının tek bir nohup.out dosyasında yer alacağını unutmayın.

Ödevleri görüntüle

Jobs komutu, kabukta çalışan mevcut işleri görüntülemenizi sağlar. Aşağıdaki betiği yazalım:

#!/bin/bash count=1 while [ $count -le 10 ] do echo "Döngü #$count" uyku 10 count=$(($count + 1)) bitti
Hadi çalıştıralım:

$ ./benim betiğim
Ve CTRL + Z tuş kombinasyonunu kullanarak geçici olarak durdurun.


Bir betiği çalıştırma ve duraklatma

Aynı betiği arka planda çalıştıralım ve betiğin çıktısını ekranda hiçbir şey görüntülemeyecek şekilde bir dosyaya yönlendirelim:

$ ./myscript > çıktı dosyası &
Artık jobs komutunu çalıştırarak, hem askıya alınan komut dosyası hem de arka planda çalışan komut dosyası hakkında bilgileri göreceğiz.


Komut dosyaları hakkında bilgi alma

Jobs komutunu çağırırken kullanılan -l anahtarı, süreç kimlikleri hakkında bilgiye ihtiyacımız olduğunu gösterir.

Askıya alınan işleri yeniden başlatma

Betiği arka planda yeniden başlatmak için bg komutunu kullanabilirsiniz.

Senaryoyu çalıştıralım:

$ ./benim betiğim
Yürütülmesini geçici olarak durduracak olan CTRL + Z tuşlarına basın. Aşağıdaki komutu çalıştıralım:

$bg


bg komutu

Komut dosyası artık arka planda çalışıyor.

Birden fazla askıya alınmış işiniz varsa belirli bir işi yeniden başlatmak için iş numarasını bg komutuna iletebilirsiniz.

İşi normal şekilde yeniden başlatmak için fg komutunu kullanın:

Komut dosyalarını çalıştırmayı planlama

Linux, bash betiklerini belirli bir zamanda çalıştırmanın birkaç yolunu sunar. Bunlar at komutu ve cron iş zamanlayıcısıdır.

At komutu şuna benzer:

[-f dosya adı] zamanında
Bu komut birçok zaman biçimini tanır.

  • Saat ve dakikayı gösteren standart, örneğin - 10:15.
  • Öğleden önce veya sonra AM/PM göstergelerini kullanma, örneğin - 22:15.
  • Şimdi, öğlen, gece yarısı gibi özel adların kullanılması.
At komutu, bir işin çalışması gereken zamanı belirlemenin yanı sıra, desteklenen biçimlerden birini kullanarak bir tarih de iletilebilir.
  • Tarihin MMDDYY, AA/GG/YY veya GG.AA.YY kalıpları kullanılarak yazıldığı standart bir tarih biçimi.
  • Tarihin metin gösterimi, örneğin 4 Temmuz veya 25 Aralık, yıl belirtilebilir veya onsuz da yapabilirsiniz.
  • Şimdiki gibi kayıt + 25 dakika.
  • Kayıt görünümü yarın 22:15'te.
  • Kayıt türü 10:15 + 7 gün.
Bu konunun derinliklerine inmeyelim, komutun basit bir kullanım örneğine bakalım:

$ at -f ./myscript şimdi


At komutunu kullanarak işleri zamanlama

-M anahtarı çağrılırken, sistem bunu yapacak şekilde yapılandırılmışsa, betiğin çıktısını e-postayla göndermek için kullanılır. Bir e-posta göndermek mümkün değilse, bu anahtar yalnızca çıktıyı bastıracaktır.

Yürütülmeyi bekleyen işlerin listesini görüntülemek için atq komutunu kullanabilirsiniz:


Bekleyen görevlerin listesi

Bekleyen işler siliniyor

atrm komutu bekleyen bir işi silmenizi sağlar. Onu çağırırken görev numarasını belirtin:

$atrm 18


Bir işi silme

Komut dosyalarını bir zamanlamaya göre çalıştırın

Komut dosyalarınızı at komutunu kullanarak bir kez çalışacak şekilde planlamak birçok durumda hayatı kolaylaştırabilir. Peki ya senaryonun her gün aynı saatte, haftada bir ya da ayda bir çalıştırılmasına ihtiyacınız varsa?

Linux'ta, düzenli olarak çalıştırılması gereken komut dosyalarını planlamanıza olanak tanıyan bir crontab yardımcı programı vardır.

Crontab arka planda çalışır ve cron tabloları adı verilen verilere dayanarak işleri bir zamanlamaya göre çalıştırır.

Mevcut bir cron iş tablosunu görüntülemek için aşağıdaki komutu kullanın:

$ crontab –l
Bir komut dosyasını belirli bir zamanlamaya göre çalışacak şekilde zamanlarken, crontab, işin ne zaman yürütülmesi gerektiğine ilişkin verileri aşağıdaki biçimde kabul eder:

Dakika, saat, ayın günü, ay, haftanın günü.
Örneğin, command adlı belirli bir komut dosyasının her gün saat 10:30'da yürütülmesini istiyorsanız, bu, görev tablosundaki aşağıdaki girişe karşılık gelecektir:

30 10 * * * komutu
Burada ayın günü, ay ve haftanın günü alanları için kullanılan "*" joker karakteri, cron'un komutu her ayın her günü saat 10:30'da çalıştırması gerektiğini belirtir.

Örneğin, komut dosyasının her Pazartesi saat 16:30'da çalışmasını istiyorsanız, görevler tablosunda aşağıdaki girişi oluşturmanız gerekir:

30 16 * * 1 komutu
Haftanın günlerinin numaralandırılması 0'dan başlar, 0 Pazar, 6 ise Cumartesi anlamına gelir. İşte başka bir örnek. Burada komut her ayın ilk günü öğlen 12'de yürütülecektir.

00 12 1 * * komutu
Aylar 1'den başlayarak numaralandırılır.
Bir tabloya giriş eklemek için crontab'ı -e anahtarıyla çağırmanız gerekir:

Crontab –e
Daha sonra program oluşturma komutlarını girebilirsiniz:

30 10 * * * /home/likegeeks/Masaüstü/myscript
Bu komut sayesinde script her gün saat 10:30'da çağrılacaktır. "Kaynak geçici olarak kullanılamıyor" hatasıyla karşılaşırsanız aşağıdaki komutu root olarak çalıştırın:

$ rm -f /var/run/crond.pid
Birkaç özel dizin kullanarak cron kullanarak komut dosyalarının periyodik olarak başlatılmasını daha da kolay bir şekilde organize edebilirsiniz:

/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
Bunlardan birine bir komut dosyası yerleştirmek, dosyanın sırasıyla saatlik, günlük, haftalık veya aylık çalışmasına neden olur.

Oturum açma ve kabuk başlangıcında komut dosyalarını çalıştırma

Kullanıcı girişi veya kabuk başlatılması gibi çeşitli olaylara dayalı olarak komut dosyalarının başlatılmasını otomatikleştirebilirsiniz. Bu gibi durumlarda işlenen dosyalar hakkında bilgi alabilirsiniz. Örneğin, bunlar aşağıdaki dosyalardır:

$HOME/.bash_profile $HOME/.bash_login $HOME/.profile
Oturum açma sırasında bir komut dosyasını çalıştırmak için çağrısını .bash_profile dosyasına yerleştirin.

Bir terminali açtığınızda komut dosyalarını çalıştırmaya ne dersiniz? .bashrc dosyası bunu düzenlemenize yardımcı olacaktır.

Sonuçlar

Bugün script yaşam döngüsü yönetimi ile ilgili konulara baktık, scriptlerin arka planda nasıl çalıştırılacağından, çalıştırılmalarının nasıl planlanacağından bahsettik. Bir dahaki sefere bash betiklerindeki işlevler ve kitaplık geliştirme hakkında bilgi edinin.

Sevgili okuyucular! Komut satırı komut dosyalarının belirli bir programa göre çalıştırılmasını planlamak için araçlar kullanıyor musunuz? Cevabınız evet ise lütfen bize onlardan bahsedin.

Geçen sefer bash betiklerinde, dosya tanımlayıcılarında ve akış yönlendirmede giriş, çıkış ve hata akışlarıyla çalışmaktan bahsetmiştik. Artık kendinize ait bir şeyler yazacak kadar bilginiz var. Bash konusunda uzmanlaşmanın bu aşamasında, çalışan komut dosyalarının nasıl yönetileceği ve bunların başlatılmasının nasıl otomatikleştirileceği hakkında sorularınız olabilir.

Şu ana kadar komut satırına komut dosyası adlarını yazıp Enter'a bastık, bu da programların hemen çalışmasını sağladı, ancak komut dosyalarını çağırmanın tek yolu bu değil. Bugün bir betiğin Linux sinyalleriyle nasıl çalışabileceğinden, betikleri çalıştırmaya ve çalıştırırken yönetmeye yönelik farklı yaklaşımlardan bahsedeceğiz.

Linux Sinyalleri

Linux'ta sistem veya uygulamalar tarafından üretilen üç düzineden fazla sinyal vardır. Burada, komut satırı komut dosyalarını geliştirirken kesinlikle işinize yarayacak, en sık kullanılanların bir listesi bulunmaktadır.
Sinyal kodu
İsim
Tanım
1
SIGHUP
Terminalin kapatılması
2
İŞARET
Kullanıcının terminalden işlemi durdurma sinyali (CTRL + C)
3
SIGQUIT
Kullanıcının terminalden (CTRL + \) bir işlemi bellek dökümüyle durdurma sinyali
9
SIGKILL
Sürecin koşulsuz sonlandırılması
15
SİGTERM
Süreç sonlandırma isteği sinyali
17
SIGSTOP
Bir süreci askıya almaya zorlamak ancak sonlandırılmamasını sağlamak
18
SIGTSTP
Terminalden bir işlemi duraklatma (CTRL+Z) ancak kapatılmaması
19
SİGCONT
Daha önce durdurulmuş bir işlemin yürütülmesine devam etme

Bash kabuğu, terminali kapattığınızda bir SIGHUP sinyali alırsa çıkar. Çıkmadan önce, çalışan komut dosyaları da dahil olmak üzere, içinde çalışan tüm işlemlere bir SIGHUP sinyali gönderir.

SIGINT sinyali işlemin geçici olarak durmasına neden olur. Linux çekirdeği, işlemci zamanını kabuğa ayırmayı durdurur. Bu gerçekleştiğinde kabuk, süreçlere bir SIGINT sinyali göndererek bildirimde bulunur.

Bash betikleri bu sinyalleri kontrol etmez, ancak bunları tanıyabilir ve betiği sinyallerin neden olduğu sonuçlara hazırlamak için belirli komutları çalıştırabilirler.

Komut dosyalarına sinyal gönderme

Bash kabuğu, klavye kısayollarını kullanarak komut dosyalarına sinyal göndermenizi sağlar. Çalışan bir betiği geçici olarak durdurmanız veya çalışmasını sonlandırmanız gerektiğinde bu çok kullanışlı olur.

Bir işlemi sonlandırmak

CTRL + C tuş kombinasyonu bir SIGINT sinyali üretir ve bunu kabukta çalışan tüm işlemlere göndererek bunların sonlandırılmasına neden olur.

Shell'de aşağıdaki komutu çalıştıralım:

$uyku 100
Bundan sonra CTRL + C tuş kombinasyonuyla çalışmasını tamamlayacağız.


Bir işlemi klavyeden sonlandırma

Süreci geçici olarak durdurmak

CTRL + Z tuş kombinasyonu, işlemi askıya alan ancak sonlandırmayan SIGTSTP sinyalini üretir. Bu işlem hafızada kalır ve çalışmaya devam edilebilir. Komutu kabukta çalıştıralım:

$uyku 100
Ve CTRL + Z tuş kombinasyonunu kullanarak geçici olarak durdurun.


Süreci duraklat

Köşeli parantez içindeki sayı, kabuğun sürece atadığı iş numarasıdır. Kabuk, içinde çalışan işlemleri benzersiz numaralara sahip işler olarak ele alır. İlk işleme 1 numarası, ikincisine - 2 vb. atanır.

Kabuğa bağlı bir işi duraklatırsanız ve ondan çıkmaya çalışırsanız, bash bir uyarı verecektir.

Askıya alınan işleri aşağıdaki komutla görüntüleyebilirsiniz:

Not –l


Görev listesi

İşlem durumunu görüntüleyen S sütununda, askıya alınan işlemler için T görüntülenir. Bu, komutun askıya alındığını veya izleme durumunda olduğunu gösterir.

Askıya alınan bir işlemi sonlandırmak istiyorsanız kill komutunu kullanabilirsiniz. Bununla ilgili detayları okuyabilirsiniz.

Çağrısı şuna benziyor:

İşlem kimliğini öldür

Sinyal yakalama

Bir komut dosyasında Linux sinyal izlemeyi etkinleştirmek için trap komutunu kullanın. Betik bu komutu çağırırken belirtilen sinyali alırsa, onu bağımsız olarak işler, ancak kabuk böyle bir sinyali işlemez.

Trap komutu, betiğin, kabuk tarafından müdahale edilmeden işlenecek sinyallere yanıt vermesini sağlar.

Trap komutunun çağrılmasının, yürütülecek kodu ve engellemek istediğimiz sinyallerin boşluklarla ayrılmış bir listesini nasıl belirttiğini gösteren bir örneğe bakalım. Bu durumda bu yalnızca bir sinyaldir:

#!/bin/bash trap "echo " Trapped Ctrl-C"" SIGINT echo Bu bir test komut dosyasıdır count=1 while [ $count -le 10 ] do echo "Loop #$count" uyku 1 count=$(($ say + 1)) tamamlandı
Bu örnekte kullanılan trap komutu, klavyede Ctrl + C tuşlarına basılarak oluşturulabilen bir SIGINT sinyaliyle karşılaştığında bir metin mesajı yazdırır.


Sinyal yakalama

CTRL + C tuşlarına her basışınızda, komut dosyası, kabuğun onu sonlandırmasına izin vermek yerine, trace çağrılırken belirtilen echo komutunu çalıştırır.

Trap komutunu çağırırken EXIT sinyalinin adını kullanarak komut dosyası çıkış sinyalini kesebilirsiniz:

#!/bin/bash trap "echo Elveda..." ÇIKIŞ sayısı=1 while [ $count -le 5 ] do echo "Döngü #$count" uyku 1 count=$(($count + 1)) bitti


Komut dosyası çıkış sinyalinin kesilmesi

Betik normal olarak veya bir SIGINT sinyali nedeniyle çıktığında, kabuk echo komutunu kesecek ve yürütecektir.

Ele geçirilen sinyallerin değiştirilmesi ve müdahalenin iptal edilmesi

Betik tarafından yakalanan sinyalleri değiştirmek için trap komutunu yeni parametrelerle çalıştırabilirsiniz:

#!/bin/bash trap "echo "Ctrl-C sıkıştı."" SIGINT sayısı=1 while [ $count -le 5 ] do echo "Döngü #$count" uyku 1 sayısı=$(($count + 1) ) bitti trap "echo "tuzağı değiştirdim!"" SIGINT sayısı=1 while [ $count -le 5 ] do echo "İkinci Döngü #$count" uyku 1 count=$(($count + 1)) bitti


Sinyal yakalama modifikasyonu

Değişiklikten sonra sinyaller yeni bir şekilde işlenecektir.

Sinyal yakalama, trap komutunun çalıştırılması, çift çizgi ve sinyal adının geçirilmesiyle de iptal edilebilir:

#!/bin/bash trap "echo "Ctrl-C sıkıştı."" SIGINT sayısı=1 while [ $count -le 5 ] do echo "Döngü #$count" uyku 1 sayısı=$(($count + 1) ) tuzak yapıldı -- SIGINT echo "Tuzağı yeni kaldırdım" count=1 while [ $count -le 5 ] do echo "İkinci Döngü #$count" uyku 1 count=$(($count + 1)) bitti
Betik, trap iptal edilmeden önce bir sinyal alırsa, bunu geçerli trap komutunda belirtildiği şekilde işleyecektir. Senaryoyu çalıştıralım:

$ ./benim betiğim
Ve klavyede CTRL + C tuşlarına basın.


Sinyal, müdahale iptal edilmeden önce yakalandı.

CTRL + C tuşlarına ilk basış, komut dosyası yürütme sırasında, sinyal müdahalesinin etkin olduğu sırada gerçekleşti, dolayısıyla komut dosyası, sinyale atanan yankı komutunu yürüttü. Yürütme kancayı kaldırma komutuna ulaştıktan sonra CTRL + C komutu her zamanki gibi çalışarak betiği sonlandırdı.

Arka planda komut satırı komut dosyalarını çalıştırma

Bazen bash betiklerinin bir görevi tamamlaması uzun zaman alır. Ancak betiğin tamamlanmasını beklemeden komut satırında normal şekilde çalışabilmeniz gerekebilir. Uygulaması o kadar da zor değil.

ps komutunun çıkardığı işlemlerin listesini gördüyseniz, arka planda çalışan ve bir terminale bağlı olmayan işlemleri fark etmiş olabilirsiniz.
Aşağıdaki betiği yazalım:

#!/bin/bash count=1 while [ $count -le 10 ] uyku yapar 1 count=$(($count + 1)) tamamlandı
Adından sonra ve işareti (&) karakterini belirterek çalıştıralım:

$ ./myscipt &
Bu, arka plan işlemi olarak çalışmasına neden olacaktır.


Arka planda bir komut dosyası çalıştırma

Betik bir arka plan işleminde başlatılacak, tanımlayıcısı terminalde görüntülenecek ve yürütülmesi tamamlandığında bununla ilgili bir mesaj göreceksiniz.

Betiğin arka planda çalışmasına rağmen, mesajları STDOUT ve STDERR'ye göndermek için terminali kullanmaya devam ettiğini, yani çıkardığı metnin veya hata mesajlarının terminalde görüneceğini unutmayın.


Süreçlerin listesi

Bu yaklaşımla terminalden çıktığınızda arka planda çalışan script de çıkacaktır.

Komut dosyasının terminali kapattıktan sonra çalışmaya devam etmesini istiyorsanız ne olur?

Terminali kapatırken çıkmayan komut dosyalarını çalıştırma

Komut dosyaları, terminal oturumundan çıktıktan sonra bile arka plan işlemlerinde yürütülebilir. Bunu yapmak için nohup komutunu kullanabilirsiniz. Bu komut, işleme gönderilen SIGHUP sinyallerini engelleyerek bir programı çalıştırmanıza olanak tanır. Sonuç olarak işlem, başlatıldığı terminalden çıktığınızda bile yürütülecektir.

Betiğimizi çalıştırırken bu tekniği uygulayalım:

Nohup ./myscript &
Terminale verilecek olan budur.


Nohup takımı

Nohup komutu terminalden bir işlemin bağlantısını kaldırır. Bu, sürecin STDOUT ve STDERR'ye olan referanslarını kaybedeceği anlamına gelir. Betiğin verdiği veri çıktısını kaybetmemek için nohup, STDOUT ve STDERR'ye gelen mesajları otomatik olarak nohup.out dosyasına yönlendirir.

Aynı dizinden birden fazla komut dosyası çalıştırırsanız çıktılarının tek bir nohup.out dosyasında yer alacağını unutmayın.

Ödevleri görüntüle

Jobs komutu, kabukta çalışan mevcut işleri görüntülemenizi sağlar. Aşağıdaki betiği yazalım:

#!/bin/bash count=1 while [ $count -le 10 ] do echo "Döngü #$count" uyku 10 count=$(($count + 1)) bitti
Hadi çalıştıralım:

$ ./benim betiğim
Ve CTRL + Z tuş kombinasyonunu kullanarak geçici olarak durdurun.


Bir betiği çalıştırma ve duraklatma

Aynı betiği arka planda çalıştıralım ve betiğin çıktısını ekranda hiçbir şey görüntülemeyecek şekilde bir dosyaya yönlendirelim:

$ ./myscript > çıktı dosyası &
Artık jobs komutunu çalıştırarak, hem askıya alınan komut dosyası hem de arka planda çalışan komut dosyası hakkında bilgileri göreceğiz.


Komut dosyaları hakkında bilgi alma

Jobs komutunu çağırırken kullanılan -l anahtarı, süreç kimlikleri hakkında bilgiye ihtiyacımız olduğunu gösterir.

Askıya alınan işleri yeniden başlatma

Betiği arka planda yeniden başlatmak için bg komutunu kullanabilirsiniz.

Senaryoyu çalıştıralım:

$ ./benim betiğim
Yürütülmesini geçici olarak durduracak olan CTRL + Z tuşlarına basın. Aşağıdaki komutu çalıştıralım:

$bg


bg komutu

Komut dosyası artık arka planda çalışıyor.

Birden fazla askıya alınmış işiniz varsa belirli bir işi yeniden başlatmak için iş numarasını bg komutuna iletebilirsiniz.

İşi normal şekilde yeniden başlatmak için fg komutunu kullanın:

Komut dosyalarını çalıştırmayı planlama

Linux, bash betiklerini belirli bir zamanda çalıştırmanın birkaç yolunu sunar. Bunlar at komutu ve cron iş zamanlayıcısıdır.

At komutu şuna benzer:

[-f dosya adı] zamanında
Bu komut birçok zaman biçimini tanır.

  • Saat ve dakikayı gösteren standart, örneğin - 10:15.
  • Öğleden önce veya sonra AM/PM göstergelerini kullanma, örneğin - 22:15.
  • Şimdi, öğlen, gece yarısı gibi özel adların kullanılması.
At komutu, bir işin çalışması gereken zamanı belirlemenin yanı sıra, desteklenen biçimlerden birini kullanarak bir tarih de iletilebilir.
  • Tarihin MMDDYY, AA/GG/YY veya GG.AA.YY kalıpları kullanılarak yazıldığı standart bir tarih biçimi.
  • Tarihin metin gösterimi, örneğin 4 Temmuz veya 25 Aralık, yıl belirtilebilir veya onsuz da yapabilirsiniz.
  • Şimdiki gibi kayıt + 25 dakika.
  • Kayıt görünümü yarın 22:15'te.
  • Kayıt türü 10:15 + 7 gün.
Bu konunun derinliklerine inmeyelim, komutun basit bir kullanım örneğine bakalım:

$ at -f ./myscript şimdi


At komutunu kullanarak işleri zamanlama

-M anahtarı çağrılırken, sistem bunu yapacak şekilde yapılandırılmışsa, betiğin çıktısını e-postayla göndermek için kullanılır. Bir e-posta göndermek mümkün değilse, bu anahtar yalnızca çıktıyı bastıracaktır.

Yürütülmeyi bekleyen işlerin listesini görüntülemek için atq komutunu kullanabilirsiniz:


Bekleyen görevlerin listesi

Bekleyen işler siliniyor

atrm komutu bekleyen bir işi silmenizi sağlar. Onu çağırırken görev numarasını belirtin:

$atrm 18


Bir işi silme

Komut dosyalarını bir zamanlamaya göre çalıştırın

Komut dosyalarınızı at komutunu kullanarak bir kez çalışacak şekilde planlamak birçok durumda hayatı kolaylaştırabilir. Peki ya senaryonun her gün aynı saatte, haftada bir ya da ayda bir çalıştırılmasına ihtiyacınız varsa?

Linux'ta, düzenli olarak çalıştırılması gereken komut dosyalarını planlamanıza olanak tanıyan bir crontab yardımcı programı vardır.

Crontab arka planda çalışır ve cron tabloları adı verilen verilere dayanarak işleri bir zamanlamaya göre çalıştırır.

Mevcut bir cron iş tablosunu görüntülemek için aşağıdaki komutu kullanın:

$ crontab –l
Bir komut dosyasını belirli bir zamanlamaya göre çalışacak şekilde zamanlarken, crontab, işin ne zaman yürütülmesi gerektiğine ilişkin verileri aşağıdaki biçimde kabul eder:

Dakika, saat, ayın günü, ay, haftanın günü.
Örneğin, command adlı belirli bir komut dosyasının her gün saat 10:30'da yürütülmesini istiyorsanız, bu, görev tablosundaki aşağıdaki girişe karşılık gelecektir:

30 10 * * * komutu
Burada ayın günü, ay ve haftanın günü alanları için kullanılan "*" joker karakteri, cron'un komutu her ayın her günü saat 10:30'da çalıştırması gerektiğini belirtir.

Örneğin, komut dosyasının her Pazartesi saat 16:30'da çalışmasını istiyorsanız, görevler tablosunda aşağıdaki girişi oluşturmanız gerekir:

30 16 * * 1 komutu
Haftanın günlerinin numaralandırılması 0'dan başlar, 0 Pazar, 6 ise Cumartesi anlamına gelir. İşte başka bir örnek. Burada komut her ayın ilk günü öğlen 12'de yürütülecektir.

00 12 1 * * komutu
Aylar 1'den başlayarak numaralandırılır.
Bir tabloya giriş eklemek için crontab'ı -e anahtarıyla çağırmanız gerekir:

Crontab –e
Daha sonra program oluşturma komutlarını girebilirsiniz:

30 10 * * * /home/likegeeks/Masaüstü/myscript
Bu komut sayesinde script her gün saat 10:30'da çağrılacaktır. "Kaynak geçici olarak kullanılamıyor" hatasıyla karşılaşırsanız aşağıdaki komutu root olarak çalıştırın:

$ rm -f /var/run/crond.pid
Birkaç özel dizin kullanarak cron kullanarak komut dosyalarının periyodik olarak başlatılmasını daha da kolay bir şekilde organize edebilirsiniz:

/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
Bunlardan birine bir komut dosyası yerleştirmek, dosyanın sırasıyla saatlik, günlük, haftalık veya aylık çalışmasına neden olur.

Oturum açma ve kabuk başlangıcında komut dosyalarını çalıştırma

Kullanıcı girişi veya kabuk başlatılması gibi çeşitli olaylara dayalı olarak komut dosyalarının başlatılmasını otomatikleştirebilirsiniz. Bu gibi durumlarda işlenen dosyalar hakkında bilgi alabilirsiniz. Örneğin, bunlar aşağıdaki dosyalardır:

$HOME/.bash_profile $HOME/.bash_login $HOME/.profile
Oturum açma sırasında bir komut dosyasını çalıştırmak için çağrısını .bash_profile dosyasına yerleştirin.

Bir terminali açtığınızda komut dosyalarını çalıştırmaya ne dersiniz? .bashrc dosyası bunu düzenlemenize yardımcı olacaktır.

Sonuçlar

Bugün script yaşam döngüsü yönetimi ile ilgili konulara baktık, scriptlerin arka planda nasıl çalıştırılacağından, çalıştırılmalarının nasıl planlanacağından bahsettik. Bir dahaki sefere bash betiklerindeki işlevler ve kitaplık geliştirme hakkında bilgi edinin.

Sevgili okuyucular! Komut satırı komut dosyalarının belirli bir programa göre çalıştırılmasını planlamak için araçlar kullanıyor musunuz? Cevabınız evet ise lütfen bize onlardan bahsedin.

Diğer çoklu görev sistemleri gibi Linux da aynı anda birçok işlemi çalıştırır. Genel olarak sizi yanıltmayacağım çünkü normal tek işlemcili bir bilgisayar belirli bir zamanda yalnızca bir görevi gerçekleştirebilir, bu nedenle Linux işlemleri yürütmek için sıraya koyar.

Süreçleri yönetmek için birkaç temel komut vardır

  • not- çalışan işlemlerin bir listesini görüntüleyin
  • öldürmek- bir veya daha fazla sürece sinyal gönderir (temel olarak onları "öldürmek" için)
  • işler- sizin tarafınızdan yürütülen işlemleri görüntülemenin alternatif bir yolu
  • bg- işlemin yürütülmesini arka planda bırakır
  • fg- sürecin yürütülmesini arka plandan çıkarır

Bu bilgi oldukça soyut görünse de grafiksel arayüz kullanan ortalama bir kullanıcı için bile pratik uygulamalara sahip olabilir. Çoğu grafik programın (hepsi olmasa da) komut satırı kullanılarak başlatılabileceğini henüz bilmiyor olabilirsiniz. Örneğin, tarayıcıyı başlatmayı deneyelim, sanırım çoğu Linux cihazında Google Chrome veya FireFox var

Enej@linux:/home/pub/www/vv$ google-chrome Mevcut tarayıcı oturumunda yeni pencere oluşturuldu.

Açmak istediğiniz URL'yi belirtebilirsiniz

Enej@linux:/home/pub/www/vv$ google-chrome http://site Mevcut tarayıcı oturumunda yeni pencere oluşturuldu.

Zaten GUI üzerinden çalışan Chrome'um var, bu nedenle tarayıcı mevcut bir oturumda yeni bir pencerenin oluşturulduğunu bildiriyor ve komut satırının kontrolünü veriyor. Veya, örneğin, kök haklarına sahip bir grafik dosya yöneticisi açmanız gerekiyorsa (örnek, Nautilus'un kurulu olduğu Gnome grafik kabuğu için çalışacaktır)

Enej@linux:/home/pub/www/vv$ sudo nautilus /root/ enej için şifre:

İşlem arka planda başlatılmadığından artık bu terminal penceresinde herhangi bir işlem yapamazsınız (işlemi sonlandırmak için CTRL + C tuşlarına basabilirsiniz).

Arka plan modu

Hayatı kolaylaştırmak için grafik programları veya uzun süre çalışabilen işlemleri çalıştırırken bunların yürütülmesi genellikle arka planda bırakılır, örneğin tarayıcıyı arka planda çalıştıralım.

Enej@linux:/home/pub/www/vv$ google-chrome http://site & 9248

Ve işareti ( & ) komut çağrısının sonundaki işlem yürütme işleminin arka plana yerleştirilmesi gerektiği anlamına gelir. Bu durumda bu terminal penceresiyle çalışmak mümkün olmaya devam eder.

Ama aniden görüşmenin sonuna bir ampresant koymayı unuttunuz, o zaman başka bir yol var. Önce CTRL + Z tuşlarına basarak yürütmeyi durdurmalısınız, ardından komut satırının kontrolünü ele geçiririz ve komutu çağırabiliriz. bg Bu, son çalışan işlemi arka planda bırakacaktır. Örnekle anlattım

Enej@linux:/home/pub/www/vv$ google-chrome http://site ^Z + Google-chrome durduruldu http://site enej@linux:/home/pub/www/vv$ bg + google- krom http://site &

Takım fg Son çalışan işlemi arka plandan çıkarır.

Çalışan işlemlerin listesi

Artık komutların arka planda nasıl çalıştırılacağını bildiğiniz için bunların bir listesini görmek güzel oldu. Bunu yapmak için komutu kullanın işler veya daha güçlü not

Enej@linux:/home/pub/www/vv$ jobs - nm-applet & (wd: ~/bin) çalıştırılıyor + google-chrome http://site & enej@linux:/home/pub/www/vv çalıştırılıyor $ ps PID TTY ZAMANI CMD 2304 pts/0 00:00:02 bash 11104 pts/0 00:00:01 chrome 11108 pts/0 00:00:00 chrome 11110 pts/0 00:00:00 chrome 11132 pts/0 00:00:00 krom 12088 puan/0 00:00:00 ps 21165 puan/0 00:00:27 nm-applet

Bir süreç nasıl "öldürülür"?

Bir süreç yanıt vermeyi durdurursa (yani askıda kalırsa), zorla "öldürülmesi" gerekir. FireFox kullananların bu durumla karşılaştığını düşünüyorum. Bu tür görevler için komut kullanılır öldürmek. Ama önce süreci bir şekilde tanımlamanız gerekiyor. Bunu yapmak için şu komutu kullanabilirsiniz: işler veya not. İlkini kullanarak işlem numarasını ve ikincisini kullanarak tanımlayıcısını öğrenebilirsiniz.

Enej@linux:/home/pub/www/vv$ google-chrome http://freaksidea..com & 15181 enej@linux:/home/pub/www/vv$ ps PID TTY ZAMANI CMD 2304 pts/0 00: 00:02 bash 15181 puan/0 00:00:00 krom 15238 puan/0 00:00:00 ps 21165 puan/0 00:00:27 nm-applet enej@linux:/home/pub/www/vv$ kill 15181

Takımlar fg Ve bgİlk argüman olarak, arka plana/arka plandan sonraki giriş/çıkış için çalışan sürecin numarasını alabilirler.

Öldürme hakkında daha fazla bilgi edinin

Aslında takım öldürmek Süreçlere çeşitli sinyaller göndermek için kullanılır. Çoğu durumda bu sinyal, komuta sonlanması gerektiğini söyler. Programlar doğru yazılmışsa işletim sisteminden gelen çeşitli sinyalleri dinler ve bunlara yanıt verirler. Örneğin, bir metin düzenleyicinin kullanıcıların oturumlarının kapatıldığını veya bilgisayarın kapatıldığını bildiren her türlü sinyali dinlemesi gerekir. Kendisi (metin editörü) böyle bir sinyali "duyduğunda", işini bitirmeden önce açık belgeleri kaydetmesi gerekir. Takım öldürmekçeşitli türde sinyaller gönderebilir, hangilerinin olduğunu öğrenmek için girin öldür -l. Aşağıda en sık kullanılan sinyallerin bir listesi bulunmaktadır (parantez içindeki sayı sinyal numarasıdır)

  • KAYIT(1)- başlangıçta programı kontrol terminaliyle iletişim kaybı hakkında bilgilendirmek amaçlanmıştı (terminaller genellikle modemler kullanılarak sisteme bağlanırdı, bu nedenle sinyalin adı kapat - kapat'tan gelir). Oturum lideri süreci işini tamamlamışsa uygulamaya SIGHUP sinyali de gönderilir. Oturum lideri olmayan birçok arka plan programı da bu sinyali işler. Bir SIGHUP alınmasına yanıt olarak, arka plan programı genellikle yeniden başlatılır (veya yalnızca yapılandırma dosyasını yeniden okur). Varsayılan olarak bu sinyali alan program sonlandırılır.
  • İŞARET(2)- genellikle terminal kullanıcısı işlemi sonlandırmak için bir komut vermişse bir işleme gönderilir (genellikle bu komut Ctrl + C klavye kısayoludur)
  • SIGTERM(15)- programın "kibar" bir şekilde sonlandırılmasına neden olur. Bu sinyali alan program, tamamlanmadan önce gerekli işlemleri gerçekleştirebilir (örneğin, açık belgeleri kaydetmek). SIGTERM'in alınması programda bir hata olduğunu değil, işletim sisteminin veya kullanıcının programı sonlandırma isteğini gösterir.
  • SIGKILL(9)- programın zorla sonlandırılmasına neden olur. Program bu sinyali ne işleyebilir ne de göz ardı edebilir.

Varsayılan komut öldürmek gönderir SIGTERM ancak sinyal numarasını veya adını da belirtebilirsiniz. Diyelim ki Chrome'unuz dondu (bazen flash oynatıcım yeterince çalışmıyor)

Enej@linux:/home/pub/www/vv$ google-chrome http://site & 22066 enej@linux:/home/pub/www/vv$ jobs - nm-applet & (wd: ~/bin) çalıştırılıyor + Google-chrome'u çalıştırma http://site & enej@linux:/home/pub/www/vv$ kill -SIGTERM %2 enej@linux:/home/pub/www/vv$ kill -SIGKILL %2 enej@linux :/home/pub/www/vv$ kill -9 %2

Not:: Yeni başlayanlar için 2 komutun çok ilginç olacağını düşünüyorum: bildir-gönder(grafiksel kabuk aracılığıyla bir mesaj gönderir, Gnome'da sağ üstte görünür) ve konuşmak(konuşma sentezleyici). Bunlardan herhangi birine sahip değilseniz, komutu kullanarak yükleyebilirsiniz. uygun-al

Enej@linux:/home/pub/www/vv$ sudo apt-get install espeak notify-send

  1. Sonucunun birkaç saat veya gün beklemesi gereken bir SQL sorgusu yürütmeniz mi gerekiyor?
  2. Arka planda bir uygulamayı çalıştırmanız mı gerekiyor?
  3. Arka planda bir program çalıştırıp ona geri dönebilmeniz mi gerekiyor?
  4. Linux konsolu kullanıyorsunuz ve ssh ile mi çalışıyorsunuz?

O zaman kesinlikle bilmeniz gerekiyor ekran.

Ekran Temelleri

Linux'ta ekran- bunlar küçültülebilen/genişletilebilen “Windows'taki pencereler” gibidir. Tek pencerede bir şeyler yapabilirsiniz, örneğin fotoğraflara bakabilirsiniz. Ancak fotoğrafları görüntülemenin yanı sıra müzik dinlemeniz gerekiyorsa, o zaman açılacaktır. yeni penceresinde (explorer), müzik dizinine gidin ve şarkıyı ses programında açın.

Linux konsolu söz konusu olduğunda (özellikle üzerinde çalışırken) ssh), o zaman çeşitli uygulamaları tek bir konsolda çalıştırmak bizim için son derece sakıncalı olacaktır. Veya belki de ilk ameliyat devam ederken ikinci ameliyatın yapılması hiç mümkün olmayacaktır. Bu ilk nokta. İkinci nokta ise sizin tarafınızdan (müşteri tarafında) herhangi bir arıza olması durumunda mevcut işlemin kesintiye uğrayacağıdır. Ssh ile çalışırken ihtiyacınız olabilecek birkaç örnek ekran:

  • Büyük miktarda dosyayı bir dizinden diğerine kopyalar veya taşırsanız
  • yoğun bir sql sorgusu çalıştırıyorsanız
  • konsolu "ele geçiren" bir uygulamayı çalıştırmanız gerekiyorsa

10 saatten fazla süredir çalışmakta olan bir SQL sorgusu, yanlışlıkla kapatılan bir terminal veya elektrik kesintisi nedeniyle kesintiye uğrarsa muhtemelen çok üzülürsünüz. Ekranın sunucu üzerinde çalışması durumunda, isteğin başlatıcısı ekran nesnesi olacak ve istek artık herhangi bir istemci sorunu nedeniyle kesintiye uğramayacaktır. Bağlantı kesilirse işlemler durmaz, çalışmaya devam eder ve istediğiniz zaman bunlara geri dönebilirsiniz.

Ekranla çalışma

Oluşturmak ekran ve onunla çalışmaya başlayın, komut satırına şunu yazın:

test1, ekran nesnesi için rastgele bir isim olduğunda, kolaylık olması açısından onu istediğiniz şekilde adlandırabilirsiniz.

Bu, adın altında bir ekran oluşturacaktır. test1. Artık uzun süren işlemleri çalıştırabilirsiniz. Örneğin, bir sql sorgusu çalıştırın:

Mysql -u ... ... arasından * seç ... güncelle ...

Zaten bu aşamada interneti kaybederseniz, yanlışlıkla terminal sekmesini kapatırsınız, bilgisayar yeniden başlatılır - hiçbir veri kaybetmezsiniz ve sql sorgusu kesintiye uğramaz.

Ekrandan çıkmak için aşağıdaki tuşlara basın:

+ & — ekrandan çıkın. İstek çalışmaya devam edecek. Ekranlarda çalışan tüm işlemler çalışmaya devam eder.

Ekranınıza veya başka bir ekran penceresine dönmek için mevcut tüm ekranları görüntüleyebilirsiniz:

ekran -r — ekranlardan birini seçin ve etkinleştirin.

Artık ekran oturumuna ihtiyacınız kalmadığında, ekran oturumunu tamamen sonlandırmak için ekranı kullanarak ekranı etkinleştirin -r ve içine tıklayın + veya çıktıyı yazdırın.