Я могу захватить синхросигнал в своем сценарии удара?

Символ расширения истории ! является особенным, даже когда это между двойными кавычками, но это теряет свое особое значение между одинарными кавычками.

Здесь, это в дважды заключенной в кавычки строке "Authorization: Bearer '00DE0000000K0eM!AQYAQGgmLxxxxxxxxxxx'". Одинарные кавычки в той строке являются обычными символами в той строке, они не интерпретируются особенно. Здесь нет никакой единственно заключенной в кавычки строки.

Если Вы добавляете обратную косую черту, она защищает ! от инициирования расширения истории, но самой обратной косой черты остается. Таким образом, Вы заканчиваете с заголовком Authorization: Bearer '00DE0000000K0eM\!AQYAQGgmLxxxxxxxxx'.

Если заголовок должен быть Authorization: Bearer '00DE0000000K0eM!AQYAQGgmLxxxxxxxxx', можно указать его этот путь:

curl https://foo.my.salesforce.com/services/data/v28.0/ -H 'Authorization: Bearer '\''00DE0000000K0eM!AQYAQGgmLxxxxxxxxxxx'\'
3
18.09.2014, 19:17
3 ответа

Я считаю, что это просто опечатка. Попробуйте заменить

Xterm*faceName: DejaVu Sans Mono Bold:size=11

на

XTerm*faceName: DejaVu Sans Mono Bold:size=11

( XTerm , а не Xterm )

-121--96785-

Я нашел следующую помощь в этой проблеме:

ipmitool bmc info

Это, кажется, пробуждает IPMI, а затем прекращает использовать 100% ядра.

Я также нашел следующее полезное:

echo 100 > /sys/module/ipmi_si/parameters/kipmid_max_busy_us

Также в прошлом я был в состоянии на некоторых серверах разрешить 100% использование ЦП путем:

ipmitool lan print

и

ipmitool bmc reset cold

, но в моем последнем опыте вышеперечисленные варианты просто привести ipmitool не реагировать и сидеть там, заставляя меня Ctrl + C это.

Надеюсь, это кому-то поможет.

-121--28418-

Можно запустить процесс, который будет посылать сигнал (например, SIGALRM ) в сценарий оболочки каждый раз x и использовать ловушку для этого сигнала. Этот процесс может быть сценарием, выполняющим следующее действие:

set -e
while true
do
  sleep 300
  kill -ALRM $PPID
done

, если он запускается сценарием основной оболочки.

Сценарий основной оболочки должен уничтожать этот процесс, когда он больше не нужен, и/или процесс должен завершаться, когда pid больше не существует (однако для этого существует условие гонки).

Примечание: если сценарий основной оболочки использует команду sleep , он будет взаимодействовать с сигналом ALRM , но вместо этого можно использовать SIGUSR1 или SIGUSR2 .

Вот пример использования субкорпуса. Чтобы сделать поведение более удобным для просмотра, я заменил 5-минутный период ( sleep 300 ) на 5-секундный период ( sleep 5 ).

#!/bin/sh

{
  set -e
  while true
  do
    sleep 5
    # Since this is run as a subshell (instead of an external command),
    # the parent pid is $$, not $PPID.
    kill -USR1 $$
  done
} &

trap 'echo "Signal USR1 received."' USR1

while true
do
  date
  sleep 1
done

Сценарий может быть прерван с помощью Ctrl-C. Он не убивает субоболочку, когда это происходит, но если pid не используется повторно, то субоболочка завершается автоматически не более чем через период (здесь, 5 секунд), так как команда kill завершается неуспешно ( kill: No this process ).

5
27.01.2020, 21:12

Да. Самый простой способ - сделать это примерно так, как вы первоначально описали в своем вопросе. Просто часть того чего-то , которое вы делаете, должна порождать другой дочерний процесс, чтобы послать вашему процессу сигнал через 5 минут в будущем. Взяв страницу из книги @ vinc17, я также сокращу интервал до 5 секунд.

trap 'ME=$$
     : $( (sleep 5
     ps -p $ME >/dev/null 2>&1 && { 
        echo hey >/dev/tty
        kill -USR1 $ME
     })&)
' USR1; kill -USR1 $$

Таким образом, у вас не будет длительного процесса, который просто просит вас зомбировать. Вместо этого у вас есть новый специализированный счетчик, который получает новую ссылку на родительский PID через каждый интервал. Я также включил небольшую проверку, чтобы убедиться, что ребенок не пытается выполнить свою единственную работу в случае, если его родитель умер после того, как он отсоединился.

Выполняйте это, и каждые 5 секунд вы должны получать:

hey
hey
hey
hey
hey
hey
hey
hey
hey
hey

В этом примере также, скорее всего, терминал тем временем зависнет, иначе он вообще ничего не сделает, если вы попытаетесь запустить весь процесс в фоновом режиме. Это связано с тем, что он удерживает / dev / tty - вместо этого выберите файл, если вы имеете в виду запускать все это в фоновом режиме, иначе выполните прямой вызов stty и повторно выполните tty, когда захотите.

2
27.01.2020, 21:12

Замените sleep $timeна sleep $time & wait $!, чтобы ловушка USR1 срабатывала, когда ожидается. См. ответ на другой вопрос или главу СИГНАЛЫ страницы руководства bash для объяснения.

В моей системе сигнал ALRM работает так же хорошо, как и USR1.

0
24.04.2021, 08:04

Теги

Похожие вопросы