Есть две причины, по которым такие zip-файлы защищены паролем:
Кто-то не хочет, чтобы у вас был к ним доступ.
Чтобы обойти фильтры спама / вредоносного ПО. В этом случае обход вызывает подозрение. Быстрый поиск в Google показывает, что есть много прошивок с официальных сайтов. Почему они защищают прошивку паролем ?? Грм.
Механизм паролей в zip-файлах не является криптографически безопасным. Взломщики паролей методом перебора паролей должны выполнить свою работу самое большее за день. Видимо, для этой задачи есть несколько.
Процесс, в котором должен запускаться ваш cmd
, будет уничтожен сигналом SIGHUP
между fork()
и exec()
, и у любой оболочки nohup
или других вещей не будет шансов запуститься. и иметь какой-либо эффект. (Вы можете проверить это с помощьюstrace
)
Вместо nohup
вы должны установить для SIGHUP
значениеSIG_IGN
(игнорировать )в родительской оболочке перед выполнением вашей фоновой команды; если для обработчика сигнала установлено значение «игнорировать» или «по умолчанию», это расположение будет унаследовано через fork()
и exec()
. Пример:
#! /bin/sh
trap '' HUP # ignore SIGHUP
xclock &
trap - HUP # back to default
или:
#! /bin/sh
(trap '' HUP; xclock &)
Если вы запустите этот скрипт с xfce4-terminal -H -x script.sh
, фоновая команда(xclock &
)не будет уничтожена командой SIGHUP
, отправленной после завершения script.sh
.
Когда лидер сеанса (процесс, который «владеет» управляющим терминалом, script.sh
в вашем случае )завершается, ядро отправляет SIGHUP
всем процессам со своего переднего плана . ] группа процессов; но set -m
активирует управление заданиями, а команды, начинающиеся с &
, будут помещены в фоновую группу процессов, и они не будут сигнализироваться SIGHUP
.
Если управление заданиями не включено (по умолчанию для не -интерактивного сценария ), команды, запущенные с помощью &
, будут выполняться в одной и той же переднем плане группе процессов, а «Фоновый» режим будет имитирован , перенаправляющим их ввод с /dev/null
и позволяя им игнорироватьSIGINT
и SIGQUIT
.
Процессы, запущенные таким образом из сценария, который когда-то выполнялся как задание переднего плана, но уже завершился, также не будут сигнализироваться с помощью SIGHUP
,поскольку их группа процессов (, унаследованная от их мертвого родителя ), больше не является приоритетной на терминале.
Дополнительные примечания:
Похоже, что «режим удержания» различается между xterm
иxfce4-terminal
(и, возможно, другими терминалами на базе vte -). В то время как первый будет держать главную сторону pty открытой, последний отключит ее после выхода программы, запущенной с -e
или -x
, что приведет к сбою записи на подчиненную сторону с EIO
. xterm
также будет игнорировать WM_DELETE_WINDOW
сообщения (, т. е. не закроется ), пока еще есть запущенные процессы из группы процессов переднего плана.
Я играл с этим. Я не могу понять это, но вот что я обнаружил. Я использовал сон 3 в качестве командной строки.
Эти двое работают. Я понятия не имею, что делает ls
в конце. Скобки и двойные nohup
, ну, они составляют подпроцесс -(. Думаю, так работает nohup
). Я понятия не имею, почему nohup
сам по себе не работает.
#!/bin/bash
nohup nohup sleep 3 &
ls #no idea why I need this
и
#!/bin/bash
(
nohup sleep 3 &
ls #no idea why I need this
)
/bin/true
работает вместо ls
. Похоже, нам нужно вызвать внешнюю команду. До сих пор не знаю, почему.