Поскольку все новые процессы принадлежат к одной и той же группе процессов, группе родительского процесса, процесс запускает группу процессов (fork
), а затем с соответствующим протоколированием и задержкой введите control+c. Все они едят SIGINT
.
$ perl -E 'fork for 1..2;say "ima $$"; $SIG{INT}=sub{die "woe $$\n"}; sleep 999'
ima 80920
ima 80922
ima 80921
ima 80923
^Cwoe 80920
woe 80922
woe 80921
woe 80923
$
(Добавьте strace
или sysdig
или что-то подобное, чтобы увидеть задействованные системные вызовы или сигналы.)
Bash не предназначен для численных расчетов. Это оркестратор , а не «язык» в том смысле, как C или Python. См. Подробнее:
Я бы сделал это примерно так:
mysum() (
IFS=+
bc<<<"$*"
)
Или, возможно:
mysum() (
IFS=+
echo "$(($*))"
)
Затем назовите это так:
$ mysum 5 89 83 7 0 2
186
Что-то вроде этого, я думаю, это нормально:
if [[ $# -lt 1 ]]
then
echo "Please input a valid amount of numbers. Need at least one."
exit 1
else
n=$#
sum=0
for arg in "$@"
do
echo "$arg"
sum=$(($sum+$arg))
done
fi
echo "sum=$sum"
echo "number of parameters=$n"
Если вы предпочитаете метод сдвига параметров, это тоже сработает:
if [[ $# -lt 1 ]]
then
echo "Please input a valid amount of numbers. Need at least one."
exit 1
else
n=$#
sum=0
while [[ $# -ne 0 ]];
do
echo "arg=$1"
sum=$(($sum+$1))
shift
done
fi
echo "sum=$sum"
echo "number of parameters=$n"