Заключить в кавычки из bash
страница справочника на СТАТУСЕ ВЫХОДА
Статус выхода выполняемой команды является значением, возвращенным waitpid системным вызовом или эквивалентной функцией. Статусы выхода падают между 0 и 255, тем не менее, как объяснено ниже, оболочка может использовать значения выше 125 особенно. Статусы выхода от оболочки builtins и составных команд также ограничены этим диапазоном. При определенных обстоятельствах оболочка будет использовать специальные значения для указания на определенные виды отказа.
Так это ограничения это к тому диапазону, я на самом деле как удивлен как Вы.
От waitpid (2)
страница справочника:
WEXITSTATUS(status)
возвращает статус выхода ребенка. Это состоит из младших значащих 8 битов аргумента состояния, что ребенок указал в вызове для выхода (3) или _exit (2) или как аргумент в пользу оператора возврата в основном (). Этот макрос должен только использоваться, если бы WIFEXITED возвратил true.
Следующий набор команд ограничит исходящий уровень для трафика с исходным или целевым портом от 8333 до 160 Кбит/с, если целевой IP не будет в локальной сети.
#network interface on which to limit traffic
IF="eth0"
#limit of the network interface in question
LINKCEIL="1gbit"
#limit outbound Bitcoin protocol traffic to this rate
LIMIT="160kbit"
#delete existing rules
tc qdisc del dev ${IF} root
#add root class
tc qdisc add dev ${IF} root handle 1: htb default 10
#add parent class
tc class add dev ${IF} parent 1: classid 1:1 htb rate ${LINKCEIL} ceil ${LINKCEIL}
#add our two classes. one unlimited, another limited
tc class add dev ${IF} parent 1:1 classid 1:10 htb rate ${LINKCEIL} ceil ${LINKCEIL} prio 0
tc class add dev ${IF} parent 1:1 classid 1:11 htb rate ${LIMIT} ceil ${LIMIT} prio 1
#add handles to our classes so packets marked with <x> go into the class with "... handle <x> fw ..."
tc filter add dev ${IF} parent 1: protocol ip prio 1 handle 1 fw classid 1:10
tc filter add dev ${IF} parent 1: protocol ip prio 2 handle 2 fw classid 1:11
#limit outgoing traffic to and from port 8333. but not when dealing with a host on the local network
# --set-mark marks packages matching these criteria with the number "2"
# these packages are filtered by the tc filter with "handle 2"
# this filter sends the packages into the 1:11 class, and this class is limited to ${LIMIT}
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d 192.168.0.0/16 -j MARK --set-mark 0x2
iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d 192.168.0.0/16 -j MARK --set-mark 0x2
Можно использовать tc
"сформировать" использование пропускной способности на основе сетевых адресов или отмеченных пакетов. Когда-то давно была некоторая опция в IPTables для маркировки пакетов затем с помощью tc
Я не могу помнить, каково это. Это не находится в моем iptables --help
где угодно, таким образом, они, возможно, вынули его. Который является точно также, потому что это, вероятно, базируется от pid или владельца. PID переработан, и владелец был бы слишком неопределенен. Если Вы знаете грубый диапазон сетевых адресов, tc
могло бы быть предпочтительным начиная с изучения, что это может окупиться в других областях. Если Вы не можете, то само приложение могло бы быть единственными критериями, которые можно надежно использовать.
Если у Вас есть довольно текущее ядро, можно ограничить использование пропускной способности приложения через cgroups. Вот другой ответ, показывающий короткий пример того, как настроить cgroup.
cgroups предпочтительны потому что fork
и execve
поймайте новых детей, таким образом, любые дочерние процессы добавляются к тому же cgroup. Вот почему тот ответ, я связал работы даже при том, что они только добавляют pid своей оболочки (выгоды cgroup bash
вызов execve
и добавляет PID к тому же cgroup).