Ubuntu Türkiye

Yazılım => Programlama => Kabuk (sh,bash,*csh,ksh,zsh) => Konuyu başlatan: marslı - 30 Kasım 2014 - 23:51:22

Başlık: [Çözüldü] Ctrl + C işlem sonlandırmama komutu
Gönderen: marslı - 30 Kasım 2014 - 23:51:22
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ı?
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: plazma - 01 Aralık 2014 - 02:24:57
Var gibi duruyor şu bağlantıları inceleyin :

http://superuser.com/questions/160388/change-bash-shortcut-keys-such-as-ctrl-c
http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/
http://www.linuxquestions.org/questions/linux-general-1/any-way-to-create-bash-short-cuts-like-ctrl-l-for-clear-and-ctrl-d-for-exit-554420/
http://ss64.com/bash/alias.html
http://books.google.com.tr/books?id=QnsMdmscQFsC&pg=PA54&lpg=PA54&dq=terminal+ctrl+c+function+change&source=bl&ots=ZXojgih3fk&sig=5hlxG4s7sKScD3T8AP4g4C-jRXI&hl=tr&sa=X&ei=-rN7VPDwD4SCzAOpoYLYAQ&ved=0CGQQ6AEwCQ#v=onepage&q=terminal%20ctrl%20c%20function%20change&f=false
http://www.unix.com/suse/32637-disabling-interrupt-function-control-c-key-combination.html
http://askubuntu.com/questions/53688/making-ctrlc-copy-text-in-gnome-terminal

fonksiyon tanımlamasını değiştirebilirsiniz ama bu sadece değişikliği yaptığınız bilgisayarda çalışacaktır.
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: htaslan - 01 Aralık 2014 - 09:25:47
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.
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: marslı - 01 Aralık 2014 - 11:10:06
@plazma ingilizcem pek iyi değil.
aslında fonksiyona yönlendirmek zorunda değil @htaslan. betiği sonlandırmasın yeter
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: htaslan - 01 Aralık 2014 - 11:22:09
Peki hangi dilde yazıyorsun betiği ?
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: marslı - 01 Aralık 2014 - 20:11:35
bash
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: heartsmagic - 01 Aralık 2014 - 21:34:24
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.
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: marslı - 01 Aralık 2014 - 22:41:41
şö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
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: heartsmagic - 02 Aralık 2014 - 00:08:25
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?
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: htaslan - 02 Aralık 2014 - 00:12:11
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.
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: marslı - 02 Aralık 2014 - 00:19:33
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 :)
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: htaslan - 02 Aralık 2014 - 00:30:50
@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.
Başlık: Ynt: Ctrl + C işlem sonlandırmama komutu
Gönderen: marslı - 02 Aralık 2014 - 00:35:04
Evet. Çok teşekkür ederim sorunum çözüme kavuşmuş gibi. farklı bir dil öğrenmek gerekebiliyor hedefler için. eyvallah