[Çözüldü] Ctrl + C işlem sonlandırmama komutu

Başlatan marslı, 30 Kasım 2014 - 23:51:22

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

marslı

merhaba ubuntu mahallesi sakinleri
bir betik yapmaya çalışıyorum. sorunum şu. bir programı arka planda çalıştırmak için şu komutu kullanıyoruz ya "program_ismi &" bunu durdurmak için ctrl+c ile kombinasyonunu kullanıyoruz. ama ctrl+c yaptığımız zaman betiği tamanen sonlandırıyor. acaba buna nasıl engel oluruz? yani ctrl+c yaptığım zaman belirlediğim function alanına yönlendirmenin bir yolu var mı?


htaslan

Demek istediğini tam olarak anlayamadım ancak ctrl-c ile betik sonlandırmayı iptal edip buna farklı bir fonksiyon yüklemek istiyorsan bunları yazdığın dilde yapabilirsin. C python ruby de böyle bisey mevcut. Ancak sen betiği bashte kodluyorsanonda var mı böyle bir olay bilmiyorum. stackoverflowu çok kurcalaman gerekebilir.

marslı

@plazma ingilizcem pek iyi değil.
aslında fonksiyona yönlendirmek zorunda değil @htaslan. betiği sonlandırmasın yeter

htaslan


marslı


heartsmagic

En azından kabaca ne yaptığını aktarsan da tecrübeli arkadaşlar daha fazla yardımcı olabilse. İstediğin şey mümkün mü bilemiyorum ama. Kabuğun sinyal yönetimi bir hayli geniş fakat özellikle ctrl-c ile sadece içerideki bir fonksiyonu sonlandırırken ana süreç devam ettirilebilir mi emin değilim.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

marslı

şöyle izah edeyim. Tor ağını hepimiz biliyoruz. terminale "tor &" yazdığımız zaman komutu sonlandırana kadar tor ağını 127.0.0.1:9050 portuyla kullanabiliyoruz. benim yapmaya çalıştığım betik ise bu ağı durdurmaya, ve başlatmaya yarıyor. tor & komutunu sonlandırsak bile bazen kapanmıyor. hala ağa bağlı olarak kalabiliyor herhangi bir yazılım tor ağını kullanıyorsa. hem tor ağını "tor &" komutu ile başlatıp, sudo killall tor komutu ile sonlandırabilecek bir betik hazırlamaya çalışıyorum.

kodlar şunlar;
#!/bin/bash
clear
function _start() {
echo -e "\e[32m"
echo '# Sisteminiz üzerinde Tor ağını geçici olarak başlatmak,'
echo '# yönetmek ve durdurmak için kullanılan betiktir.'
}
function _menu() {
echo -e "\e[97m"
echo ' [A] Tor Servisini Başlat'
echo ' [S] Tor Servisini Durdur'
echo ' [Q] Çık'
echo -n '?> '
read menu
case $menu in
             [Aa])
echo -e "\e[92m" ; echo 'Tor Servisi Başlatılıyor..' ; tor &
;;
             [Ss])
echo -e "\e[92m" ; echo 'Tor Servisi Durduruluyor'
killall tor
;;
             [Qq])
echo -e "\e[92mÇıkılıyor.."
;;             
             *)
clear ; _start ; _menu
;;
esac
}
_start
_menu

heartsmagic

Ancak bu ayrı bir fonksiyon falan değil ki, alt süreçlerin sonlandırılamaması sorunu gibi?
Neden özel betik?

sudo service tor stop
veya
sudo /etc/init.d/tor stop
işe yaramıyor mu?
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

htaslan

#9
dediklerin çerçevesinde şöyle bir betik yazdım ancak python da kodladım. 1 seçeneğini seçtinizde tor başladıktan sonra yani çalışıyorken komut satırı aktif. Tor çalışıyorken yine 2 yazıp entera basarsanız toru kapatacaktır. Umarım dediğiniz böyle birşeydir :)

# -*- coding: utf-8 -*-
#

import os
import sys

try:
  while True:
   
    print  """1) TOR Servisini Başlat
2) TOR Servisini Durdur
3) Kapat """
   
    command = input("Seçim:")
    if command == 1:
      os.system("tor &")
     
    elif command == 2:
      print "Çıkılıyor...\n"
      os.system("sudo killall tor")
     
    elif command == 3:
      sys.exit()
     
    else:
      print "Geçersiz seçim.\n"

except KeyboardInterrupt:
  sys.exit()
 
except SyntaxError:
  pass
 
 


bir de betikle uğraşmak daha zor olabilir. Çünkü betik her zaman aynı neticeyi vermeyebilir. Örneğin dilsel hata gerçekleştiğinde type hataları alabilirsin bence en garantisi terminal den komutla kapatmak.Linux ta standart sinyallerde çok büyük bir sistem sorunu yoksa. SIGKILL ve SIGSTOP sinyalleri atlanamaz kesinlikle süreç gerçekleştirilmeli. Ancak SIGQUIT dediğimiz klavyeden süreci durdurma sinyali atlayabilir.

marslı

Evet iki komutta işe yarıyor. Açıkça konuşmak gerekirse; kendimi geliştirmek amacıyla yapmaya çalıştığım bir betik. terminalden ayrı ayrı komutları girmek yerine işi basitleştirmeyi planlıyorum. 


htaslan, teşekkür ederim istediğim bir uygulama ama çalışılabilirlik konusunda sıkıntı var :)

htaslan

@marslı bendede ufak tefek hatalar verdi ama 2 dk da yazılmış bir kod düzenlenmesi gerekebilir. Ancak yinede fonksiyonu yerine getiriyor olması gerekiyor. Belki editöre kopyalarken syntaxında problem oluşmuş olabilir.

marslı

Evet. Çok teşekkür ederim sorunum çözüme kavuşmuş gibi. farklı bir dil öğrenmek gerekebiliyor hedefler için. eyvallah