Вы думаете о процессе, записывающем в какой-то /proc/1234/mem
другой процесс pid_t
1234?
Или вы думаете о процессе, записывающем в исполняемый файл ELF другой процесс?
Оба сценария очень необычны и специфичны для Linux (у других Posix их нет), поэтому я не знаю, что может произойти в этом случае. Но, по крайней мере, механизм разрешения должен защищать некоторых.
См. Также ошибку ETXTBSY
.
На практике (как показано strace -f /usr/bin/gcc hello.c -o hello
) компилятор и компоновщик удаляют исполняемый файл до open
, что делает его для записи исполняемого файла, поэтому большая часть компиляции никогда не записывает в старый исполняемый файл:
870 stat("hello", {st_mode=S_IFREG|0755, st_size=6096, ...}) = 0
870 unlink("hello") = 0
870 open("hello", O_RDWR|O_CREAT|O_TRUNC|O_CLOEXEC, 0777) = 17
870 fstat(17, {st_mode=S_IFREG|0755, st_size=0, ...}) = 0
Итак, чтобы записать в исполняемый файл, вы должны стараться. Конечно, когда вы делаете это, могут происходить непослушные сбои.