Ну, я сказал бы, что "Вы не можете сделать этого", прежде чем я погуглил этот stackoverflow вопрос. Кажется, что можно использовать gdb
звонить waitpid()
системный вызов в родительском процессе процесса-зомби. Хороший прием.
Мой совет не состоит в том, чтобы сделать этого: независимо от того, что "lightdm", он, вероятно, моется после дочерних процессов, из которых выходят, время от времени, или возможно он предполагает, что делает. Если Вы делаете waitpid()
с gdb
, можно полить из шланга lightdm
.
Для этого есть несколько решений - вы хотите сохранить ручное управление шагами и просто выполнять их одновременно? Посмотрите на CSSH (если вы используете систему Linux) или SuperPutty (если вы используете систему Windows). Если вы просто хотите все автоматизировать, посмотрите Ожидайте .
@Dave
В зависимости от сценария вы можете запустить все через ssh:
for server in s1 s2 s3; do
ssh $server "command one; command two; ..."
done
Или разделить его на несколько вызовов:
for server in s1 s2 s3; do
ssh $server command one
ssh $server command two
...
done
Не стесняйтесь добавить это к вашему ответу, просто проходя мимо ...
Сделайте себе одолжение и проверьте Доступно . Похоже, это именно то, что вам нужно. Он использует SSH и легко масштабируется, все, что вам нужно сделать, это добавить серверы в список по мере необходимости. Научившись делать книгу воспроизведения, вы сэкономите бесчисленное количество часов в будущем.
Другой вопрос конкретно спрашивает, как "получить текущее время в секундах после Эпохи". Формат даты и аргументы описаны в руководстве bash (прокрутите вниз до printf
):
% (datefmt) TВызывает
printf
вывод строки даты-времени в результате использования datefmt в качестве строки формата дляstrftime
(3). Соответствующий аргумент - целое число, представляющее количество секунд с начала эпохи. Два могут использоваться специальные значения аргументов:-1
представляет текущее время, и-2
представляет время вызова оболочки. Если аргумент отсутствует указанное преобразование ведет себя так, как если бы было задано значение-1
. Это - исключение из обычного поведенияprintf
.
Таким образом, аргумент должен быть целым числом секунд, начиная с эпохи (например, см. ответ на "Как преобразовать временную метку эпохи в читаемый человеком формат" ).
, если не используются специальные значения ( -1
или -2
) или не используется аргумент (и в этом случае по умолчанию используется значение -1
)
mount/ dev/your_USB/mnt
mount --bind/dev/mnt/dev
mount --bind/proc/mnt/proc
mount --bind/sys
chroot/mnt
grub-mkconfig
Как уже упоминалось, существуют инструменты, предназначенные для управления несколькими машинами, но для простого решения bash можно написать цикл для и выполнить команды через ssh на нескольких узлах.
Предполагая, что host1 и host2 являются именами хостов ndoes, от которых вы хотите это сделать:
for node in host1 host2; do
scp /tmp/script.sh user@$node:/tmp/script.sh
if [[ "$?" == "0" ]];then #checks that last command didn't return an error
ssh -oBatchMode=yes user@$node /tmp/script.sh
fi
done
Если вы собираетесь использовать это решение, я рекомендую настроить ключи ssh так, чтобы вам не приходилось вводить пароль каждый раз. Параметр BatchMode приведет к пропуску сценария, а не к ожиданию ввода. Можно решить, является ли это предпочтительным.