.\" Man page for the lslocks command.
.\" Copyright 2012 Davidlohr Bueso <dave@gnu.org>
.\" May be distributed under the GNU General Public License

.TH LSLOCKS 8 "December 2014" "util-linux" "System Administration"
.SH NAME
lslocks \- list local system locks
.SH SYNOPSIS
.B lslocks
[options]

.SH DESCRIPTION
.B lslocks
lists information about all the currently held file locks in a Linux system.
.sp
Note that lslocks also lists OFD (Open File Description) locks, these locks are
not associated with any process (PID is -1).  OFD locks are associated with the
open file description on which they are acquired.  This lock type is available
since Linux 3.15, see \fBfcntl\fR(2) for more details.

.SH OPTIONS
.TP
.BR \-b , " \-\-bytes"
Print the SIZE column in bytes rather than in a human-readable format.
.TP
.BR \-i , " \-\-noinaccessible"
Ignore lock files which are inaccessible for the current user.
.TP
.BR \-J , " \-\-json"
Use JSON output format.
.TP
.BR \-n , " \-\-noheadings"
Do not print a header line.
.TP
.BR \-o , " \-\-output " \fIlist\fP
Specify which output columns to print.  Use
.B "--help"
to get a list of all supported columns.

The default list of columns may be extended if \fIlist\fP is
specified in the format \fI+list\fP (e.g. \fBlslocks -o +BLOCKER\fP).
.TP
.B \-\-output\-all
Output all available columns.
.TP
.BR \-p , " \-\-pid " \fIpid\fP
Display only the locks held by the process with this \fIpid\fR.
.TP
.BR \-r , " \-\-raw"
Use the raw output format.
.TP
.BR \-u , " \-\-notruncate"
Do not truncate text in columns.
.TP
.BR \-V , " \-\-version"
Display version information and exit.
.TP
.BR \-h , " \-\-help"
Display help text and exit.

.SH OUTPUT
.IP "COMMAND"
The command name of the process holding the lock.
.IP "PID"
The process ID of the process which holds the lock or -1 for OFDLCK.
.IP "TYPE"
The type of lock; can be FLOCK (created with \fBflock\fR(2)), POSIX
(created with \fBfcntl\fR(2) and \fBlockf\fR(3)) or OFDLCK (created with fcntl(2).
.IP "SIZE"
Size of the locked file.
.IP "MODE"
The lock's access permissions (read, write).  If the process is blocked and waiting for the lock,
then the mode is postfixed with an '*' (asterisk).
.IP "M"
Whether the lock is mandatory; 0 means no (meaning the lock is only advisory), 1 means yes.
(See \fBfcntl\fR(2).)
.IP "START"
Relative byte offset of the lock.
.IP "END"
Ending offset of the lock.
.IP "PATH"
Full path of the lock.  If none is found, or there are no permissions to read
the path, it will fall back to the device's mountpoint and "..." is appended to
the path.  The path might be truncated; use
\fB\-\-notruncate\fR to get the full path.
.IP "BLOCKER"
The PID of the process which blocks the lock.

.SH NOTES
.nf
The \fBlslocks\fR command is meant to replace the \fBlslk\fR(8) command,
originally written by Victor A. Abell <abe@purdue.edu> and unmaintained
since 2001.
.fi

.SH AUTHORS
.nf
Davidlohr Bueso <dave@gnu.org>
.fi

.SH "SEE ALSO"
.BR flock (1),
.BR fcntl (2),
.BR lockf (3)

.SH AVAILABILITY
The lslocks command is part of the util-linux package and is available from
https://www.kernel.org/pub/linux/utils/util-linux/.
