Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Aprenda inglês de uma vez por todas

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Faça a sua vida mais facil com o uso de aliases (cont.)

Colaboração: Gustavo Chaves

Data de Publicação: 08 de Junho de 1998

Na minha experiência de administrador muitas vezes executo o `ps -ef|grep x' para saber o PID de um processo e poder mata-lo com um kill.

Ha um ou dois anos eu li o classico `The UNIX Programming Environment', do Kernighan e do Pike, e eles implementam um script chamado zap que eu achei muito interessante. Ele aceita os mesmos argumentos que o kill, mas no lugar do PID do processo ele aceita uma expressão regular do tipo que o egrep aceita. Um exemplo da bem a idéia do que ele faz:

    $ zap netscape
    gustavo 4543 4524  0 18:17:23 ?        0:00 /bin/sh -c `netscape [y/N]?n
    gustavo 4544 4543  3 18:17:24 ?        5:16 netscape [y/N]?n
    $

As linhas são apresentadas uma a uma e eu devo teclar y' oun' pra dizer se quero ou não dar um kill no processo.

Como não tenho o livro em mcos, eu resolvi implementar o zap a partir da sua `especificação'. O resultado é o script abaixo.

  --------------------
  #!/bin/sh
  # $Id: zap,v 1.6 1997/08/19 20:44:55 gustavo Exp $
  
  # I got this idea when skimming the Kernigham's book `UNIX Programming
  # Environment'.  I don't have the source, hence the different
  # implementation.  This is handy for sysadmins who do a lot of `ps'
  # followed by ""kill'.  Instead of""kill PID', use `zap REGEXP', where
  # REGEXP is an egrep-like regular expression that will be matched
  # against the ps's output.  Every matching line is presented to the
  # user asking him to tell if the process in question must be killed or
  # not.  zap can take an option telling which signal to use in the
  # killing.
  
  PATH=/usr/bin:/bin:/sbin; export PATH
  PROGNAME=$0
  OS=""uname -s""_""uname -r""
  
  case $OS in
      SunOS_4*)
          PS='ps auxww'
          ECHON='echo -n'
          ;;
      SunOS_5*)
          PS='ps -ef'
          ECHON='/usr/ucb/echo -n'
          ;;
      OSF*|HP-UX*|AIX*)
          PS='ps -ef'
          ECHON='echo -n'
          ;;
      *)
          echo "Unknown system: $OS"
          exit 2
  esac
  
  usage() {
      echo "usage: ""basename $PROGNAME"" [-SIG] [--] regexp"
      exit 1
  }
  
  case "$1" in
      -*) SIG=$1; shift ;;
      *)  SIG=-15 ;;
  esac
  
  if [ "$1" = "--" ]; then
      shift
  fi
  
  if [ $# -eq 1 ]; then
      REGEXP=$1
  else
      usage
  fi
  
  TTY=""tty""
  TMP=/tmp/zap.$$
  
  $PS >$TMP
  
  egrep -- "$1" $TMP |
      while read UID PID REST; do
          if [ "$PID" -ne $$ ]; then
              $ECHON "$UID $PID $REST [y/N]?"
              read ANSWER <$TTY
              case "$ANSWER" in
                  y|Y) kill $SIG $PID;;
              esac
          fi
      done
  
  rm -f $TMP

Veja a relação completa dos artigos de Gustavo Chaves

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.96/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1165 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

PDF Explicado