Es gibt mehrere Möglichkeiten Entfernen einer Sperrdatei in der Weise, die Sie beschreiben, zu nähern. (Ein geeigneterer Weg besteht jedoch darin, die Sperrdatei (oder lockdir für atomic locking) zu erstellen, die den PID
des laufenden Prozesses enthält). Für den einfachen Fall, den Sie beschreiben, können Sie jedoch pidof
für den Namen des laufenden Prozesses als eine andere Art von Prüfung verwenden.
(seien Sie sich nur bewusst, wenn mehrere Prozesse unter demselben Namen laufen, die Lockfile wird entfernt und es gibt keine Korrelation darüber, zu welchem Prozess die Lockfile gehörte).
Ein kurzes Skript für Ihre Situation könnte die Verwendung von pidof
(die Einschränkungen und Subjekt) zu machen sein:
#!/bin/bash
test -z "$1" && { ## validate required input/show usage
printf "error: insufficient input, usage: %s procnm [lockfile].\n" \
"${0//*\/}" >&2
exit 1
}
procnm="$1" ## process name
victim=${2:-/var/lib/dpkg/lock} ## lockfile name
if [ ! -n "$(pidof "$procnm")" ] ## test pidof name
then ## if not running, rm lock
[ -f "$victim" ] && rm "$victim"
fi
Das Skript führt den Prozessnamen als erstes Argument und ein optionales zweites Argument des lockfile Lage. (Angenommen, Sie haben Ihre beabsichtigte Sperrdatei als Standard fest programmiert). z.B.
$ bash rmlock.sh
error: insufficient input, usage: rmlock.sh procnm [lockfile].
nur eine Vermutung, aber versuchen, es zu löschen. Wenn es von einem Prozess verwendet wird, schlägt das Löschen fehl. – Marichyasana