Что происходит с дескрипторами файлов, когда процесс завершается?

Как вы показали, system / nrcalc - это символическая ссылка в локальной системе, но это каталог на удаленном сервере. Если каталог в удаленной системе не пуст, rsync откажется удалить его (чтобы освободить место для символической ссылки), если вы не укажете - force или одно из - delete параметры. Если вы не хотите заменять каталог на дальнем конце, но вам все равно нужно обновить его содержимым, указанным в локальной символической ссылке, вы можете использовать - copy-dirlinks .

Rsync жалуется на это даже с указанием - dry-run , чтобы предупредить вас о том, что ему потребуется удалить каталог на дальнем конце, чтобы выполнить то, что вы его просите. Использование любой из упомянутых мной опций в сочетании с -n даст вам чистый пробный запуск без фактического удаления чего-либо.

Что касается других опций, которые вы пробовали:

  • Параметр -K ( - keep-dirlinks ) эквивалентен - copy-dirlinks , за исключением стороны назначения. Ваша символическая ссылка находится на стороне источника, поэтому эта опция не повлияла на вас.

  • Параметр -l ( - links ) гарантирует, что символические ссылки копируются как символические ссылки, но опять же без - force или - -delete , rsync откажется заменять непустой каталог символической ссылкой. Кроме того, -a подразумевает -l , так что вы все равно использовали его все время.

3
15.03.2018, 15:31
2 ответа

Вы можете прочитать об управлении процессами ядра Linux, например. здесь

Process Termination

When a process terminates, the kernel releases the resources owned by the process and notifies the child's parent of its demise.

2
27.01.2020, 21:13

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

Это задокументировано в POSIX . В «Последствия завершения процесса », среди прочих последствий:

  • All of the file descriptors, directory streams, conversion descriptors, and message catalog descriptors open in the calling process shall be closed.

И в «Завершение процесса »:

It is important that the consequences of process termination as described occur regardless of whether the process called _exit() (perhaps indirectly through exit()) or instead was terminated due to a signal or for some other reason.

9
27.01.2020, 21:13

Теги

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