Я не видел встроенной опции, поэтому вот одна идея:
#!/bin/bash
str="$1"
regex='^[]0-9a-zA-Z,!^`@{}=().;/~_|[-]+$'
if [[ $str =~ $regex ]]
then
echo "matches"
echo "Match: ${BASH_REMATCH[0]}"
else
echo "doesn't match"
for (( i = 0; i < ${#str}; i++ )) do
c=${str:$i:1}
if [[ ! $c =~ $regex ]]
then
echo Non-matching character at index $i: "$c"
fi
done
fi
Он просто перебирает символ $ str
за символом, сравнивая этот символ с регулярным выражением $.
.
Обычно вы используете taskset
для ограничения процесса после его запуска. Вы можете использовать pidof java
, чтобы определить, что такое PID для вашего Java-приложения, а затем передать его в taskset
:
$ taskset -p $(pidof java) --cpu-list 0-2,5
ПРИМЕЧАНИЕ.:Если бы у вас было 6 процессоров, 0,1,2,5 назначали бы привязку к этим процессорам для PID вашей JVM.
Имейте в виду, что сходство не ограничивает другие процессы в использовании этих ЦП, taskset
если это скорее инструмент ограничения конкретного процесса или процессов определенным набором ЦП, а не ограничение исключительности.
taskset is used to set or retrieve the CPU affinity of a running process given its PID or to launch a new COMMAND with a given CPU affinity. CPU affinity is a scheduler property that "bonds" a process to a given set of CPUs on the system. The Linux scheduler will honor the given CPU affinity and the process will not run on any other CPUs. Note that the Linux scheduler also supports natural CPU affinity: the scheduler attempts to keep processes on the same CPU as long as practical for performance reasons. Therefore, forcing a specific CPU affinity is useful only in certain applications.
Этот самостоятельный ответ U&L Q&A под названием:Как использовать контрольные группы, чтобы ограничить все процессы, кроме белого списка, одним процессором? раскрывает тему того, как это сделать с помощью cgroups.