Почему скопированный исполняемый файл rm не работает на другой машине linux?

Когда вы набираете Ctrl + c , это обычно отправляет процессу сигнал «INT». From signal (7) :

  Signal Value Action Comment 
 ──────────────────────────── ────────────────────────────────────────────── 
. .. 
SIGINT 2 Term Interrupt с клавиатуры 
 

Обычно процессы устанавливают обработчик для этого сигнала, позволяя им выполнить некоторую очистку перед выходом. В случае вашего сценария led.py похоже, что этот обработчик отключил светодиоды.

По умолчанию pkill и kill отправляют сигнал «TERM» (15). (Вы также пробовали послать «KILL» (9).) Эти сигналы заставили led.py умирать менее изящно, без возможности запустить его завершающую функцию.

Чтобы разрешить led.py правильно завершить работу, вы должны отправить сигнал «INT» (2) с помощью команды

pkill -2 [process specifier]

pkill в вашем crontab , возможно, тоже не смог найти процесс, потому что имя, которое вы указали, было не тем, которое он искал. Из pkill (1) :

-f, --full

Шаблон обычно сопоставляется только с именем процесса. Когда -f используется полная командная строка.

Поскольку ваш сценарий, led.py , предположительно был сценарием на Python, имя процесса было просто python (или python3 или аналогичным). Полная командная строка будет выглядеть примерно как python led.py , поэтому параметры -f позволяют вам сопоставить это.

pkill -2 -f led.py

1
09.02.2017, 19:49
1 ответ

rm - это двоичный файл, поэтому он зависит от архитектуры. Это будет работать только в том случае, если вы копируете с той же архитектуры и с теми же установленными необходимыми библиотеками.

Вы также можете скомпилировать его из исходного кода или установить двоичный пакет. В системах Debian это пакет .

Если у вас уже есть двоичный файл и вы хотите узнать его архитектуру, используйте команды file или objdump .

10
27.01.2020, 23:11

Теги

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