Как я могу знать, работает ли команда патча?

С точки зрения операционной системы каждая запускающая программа является процессом. То, когда ядро будет сделано, инициализируя его, запустит один процесс, главным образом init. Является ли это SYSV init, или systemd не важен для этого обсуждения, один процесс запускается. Любая программа запущена другим процессом. Это создает отношения между процессами, стартовым процессом (иначе "родитель") и запущенным процессом (иначе "ребенок"). Ядро знает об этих отношениях.

Когда процесс выходит в Linux/Unix, ядро отправляет во все его дочерние процессы сигнал номер 15 (SIGTERM). Это может быть поймано процессом, и процесс должен сделать то, что это должно сделать для выхода безопасным способом. Можно знать, также знают сигнал номер 9 (SIGKILL). Этот сигнал не может быть пойман процессом: ядро останавливает процесс отдельно.

Посмотрите это pstree:

init─┬─acpid
     ├─atd
     ├─cron
     ├─dbus-daemon
     ├─dhclient
     ├─dhcpd
     ├─exim4
     ├─6*[getty]
     ├─lwresd───6*[{lwresd}]
     ├─named───6*[{named}]
     ├─nmbd
     ├─portmap
     ├─rpc.statd
     ├─rsyslogd───2*[{rsyslogd}]
     ├─smbd───2*[smbd]
     ├─sshd───sshd───bash───screen───screen───bash───pstree
     └─udevd───2*[udevd]

Вы видите это pstree дочерний процесс bash, и bash дочерний процесс screen. Когда я выхожу из системы от машины, bash после sshd выходы и ядро отправляют сигнал 15 в дочерний процесс screen. НО, screen не реагирует на это. Так screenновый родительский процесс является теперь процессом номер 1 (init). Посмотрите в этом pstree:

init─┬─acpid
     ├─atd
     ├─cron
     ├─dbus-daemon
     ├─dhclient
     ├─dhcpd
     ├─exim4
     ├─6*[getty]
     ├─lwresd───6*[{lwresd}]
     ├─named───6*[{named}]
     ├─nmbd
     ├─portmap
     ├─rpc.statd
     ├─rsyslogd───3*[{rsyslogd}]
     ├─screen───bash
     ├─smbd───2*[smbd]
     ├─sshd───sshd───bash───pstree
     └─udevd───2*[udevd]

На самом деле это - то, что происходит, когда Вы отсоединяетесь screen (ctrl+a - d). Так все подпроцессы screen продолжайте бегать за разъединением или отсоединением от screen. Когда Вы выполняете процесс без screen или tmux, это получит сигнал SIGTERM.

2
05.05.2014, 01:12
3 ответа
[116441] По какой-то причине файл патча должен быть загружен в программу патча путем перенаправления, т.е.[12156]не работает, но[12157]работает[116446].
5
27.01.2020, 21:49
[116309] Очень простое решение - это поместить ваши файлы под контроль версий перед применением патча. Инструменты управления версиями дю путешествия - Git и Mercurial. Я лично использую и рекомендую Mercurial.

Также, если вы хотите посмотреть, к каким файлам применяется патч, вы можете запустить

Sample output с Mercurial:

6
27.01.2020, 21:49

Вы можете использовать параметр -i вместо прямого перенаправления:

$ patch -i /path/to/file.patch
1
27.01.2020, 21:49

Теги

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