プログラムの名前とシグナルの名前を引数として取り、いくつかのことを行うbashプログラムを作成する必要があります。シグナルの名前が指定されていない場合、デフォルトのシグナルはSIGINTになります。
プログラムfile.shは、指定されたプログラム(引数から)にプロセスが1つしかないかどうかを確認する必要があります。その場合、指定されたシグナルをそのプロセスに送信します。さらにプロセスがある場合、file.shはPID番号を出力するだけで済みます。プロセスがない場合は、ユーザーに警告するだけです。これには、grepコマンドとwcコマンドが役立つと思います。
例は次のようになります
$ 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
私はこれを書いたが、上記の例には適していない
#!/bin/bash
if [ $# -eq 0 ]; then
echo "No arguments supplied";
Elif [ $# -eq 1 ]; then
num=$(pgrep -c $1);
echo $num "(the default signal should be used)";
if [ $num -gt 1 ]; then
pidof $1
Elif [ $num -lt 1 ]; then
echo "Warning: the program doesn't have any processes";
else
echo $num and default signal is sigint
pr=$(pidof $1)
kill -SIGINT $pr
fi
else
echo "(the given signal should be sent to the program)"
fi
このための任意の助けは本当にいただければ幸いです。
これはあなたが期待することをするべきです
#!/usr/bin/env bash
if [ $# -eq 0 ]; then
echo "No arguments supplied";
else # at least the process name was passed ($1)
num=$(pgrep -c -x "$1");
if [ "$num" -gt 1 ]; then # more than one process found
pidof "$1"
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=$2
fi
pr=$(pidof "$1")
kill -"$signal" "$pr"
fi
fi