De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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
ou n
pra
dizer se quero ou não dar um kill no processo.
Como não tenho o livro em mãos, 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
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários