Arquivo Bash para enviar um sinal para um processo

2

Eu preciso escrever um programa bash que levará o nome de um programa e um nome de um sinal como argumentos e, em seguida, fazer algumas coisas. Se o nome do sinal não é dado, o sinal padrão deve ser SIGINT.

O programa file.sh precisa verificar se o programa dado (do argumento) tem apenas um processo. Nesse caso, envia o sinal dado para esse processo. Se houver mais processos, o arquivo.sh precisará imprimir seus números PID. Caso não haja nenhum processo, apenas avise o usuário. Eu acho que os comandos grep e wc serão úteis para isso.

O exemplo deve ser algo como

$ vi & vi &
$ bash file.sh vi SIGINT
vi: 233, 234
$ killall -s KILL vi
$ bash file.sh vi SIGINT
vi: there is no process with that name

Eu escrevi isso, mas não é adequado com o exemplo que é dado acima

#!/bin/bash
if [ $# -eq 0 ]; then
    echo "No arguments supplied";
elif [ $# -eq 1 ]; then
    num=$(pgrep -c );
    echo $num "(the default signal should be used)";
    if [ $num -gt 1 ]; then 
        pidof 
    elif [ $num -lt 1 ]; then
        echo "Warning: the program doesn't have any processes";
    else
        echo $num and default signal is sigint
        pr=$(pidof )
        kill -SIGINT $pr
    fi
else
    echo "(the given signal should be sent to the program)"
fi

Qualquer ajuda para isso seria muito apreciada.

    
por N.john 31.10.2015 / 04:48

1 resposta

1

Este deve fazer o que você espera

#!/usr/bin/env bash
if [ $# -eq 0 ]; then
    echo "No arguments supplied";
else # at least the process name was passed ()
    num=$(pgrep -c -x "");
    if [ "$num" -gt 1 ]; then # more than one process found
        pidof ""
    elif [ "$num" -lt 1 ]; then
        echo "Warning: the program doesn't have any processes";
    else
        signal=SIGINT # default signal
        if [ $# -ge 2 ]; then # signal provided, use it
            signal=
        fi

        pr=$(pidof "")
        kill -"$signal" "$pr"
    fi
fi
    
por Onilton Maciel 31.10.2015 / 05:50