Nein, das wird nicht einfach passieren, weil zwei Perl-Skripte zur gleichen Zeit ausgeführt werden.
Die wahrscheinlichere Erklärung ist, dass das Skript selbst zum Schreiben geöffnet ist, während das Betriebssystem versucht, seine Shebang-Zeile zu lesen, die Interpreter zu bestimmen, zu verwenden.
Dies kann auch passieren, wenn ein externer Prozess das Perl-Interpreter selbst oder einen der gemeinsamen genutzten Bibliotheken zu aktualisieren oder zu ändern versucht, davon abhängt. Beachten Sie, dass Dateiberechtigungen normalerweise nicht für Superuser-Accounts wie root gelten. Daher kann jeder Prozess, der als Superuser ausgeführt wird, dennoch versuchen, den Perl-Interpreter zu ändern, obwohl keine +w
Bits gesetzt sind.
(Das heißt, die meisten gutartigen Betriebssystem-Upgrade-Tools auf POSIX-style Betriebssystemen schreiben die aktualisierte Version einer Binärdatei in eine neue Datei auf dem gleichen Dateisystem, schließen Sie diese Datei, wenn Sie fertig sind, und benennen Sie sie über die Original (eine atomare Operation) - so dass der Inode, der an /usr/bin/perl
angeschlossen ist, selbst nie zum Schreiben geöffnet ist. Daher ist der Fehler, den Sie sehen, auf einem gut erzogenen System nicht etwas, was in der Praxis jemals auftauchen sollte. .
Sie können den fuser
Befehl, um zu sehen, der eine Datei geöffnet hat, entweder für das Skript oder für seine Dolmetscher:
$ sudo fuser /usr/bin/perl -uv
USER PID ACCESS COMMAND
/usr/bin/perl: root 16579 f.... (root)python
(dies ist wohl eher eine Systemadministration Frage - es hängt von O -spezifische Semantik und ist in keiner Weise spezifisch für Perl, oder sogar für interpretierte Sprachen - so in der Zukunft könnte Server Fault der geeignetere Veranstaltungsort sein) –
tag perl gelöscht – joewhitedelux