flock(1)


NAME

   flock - manage locks from shell scripts

SYNOPSIS

   flock [options] file|directory command [arguments]
   flock [options] file|directory -c command
   flock [options] number

DESCRIPTION

   This  utility  manages flock(2) locks from within shell scripts or from
   the command line.

   The first and second of the  above  forms  wrap  the  lock  around  the
   execution  of  a  command,  in  a manner similar to su(1) or newgrp(1).
   They lock a specified file or directory,  which  is  created  (assuming
   appropriate  permissions) if it does not already exist.  By default, if
   the lock cannot be immediately acquired, flock waits until the lock  is
   available.

   The  third  form  uses an open file by its file descriptor number.  See
   the examples below for how that can be used.

OPTIONS

   -c, --command command
          Pass a single command, without arguments, to the shell with -c.

   -E, --conflict-exit-code number
          The exit code used when  the  -n  option  is  in  use,  and  the
          conflicting  lock  exists,  or  the -w option is in use, and the
          timeout is reached.  The default value is 1.

   -F, --no-fork
          Do not fork before executing command.  Upon execution the  flock
          process is replaced by command which continues to hold the lock.
          This  option  is  incompatible  with  --close  as  there   would
          otherwise be nothing left to hold the lock.

   -e, -x, --exclusive
          Obtain  an  exclusive lock, sometimes called a write lock.  This
          is the default.

   -n, --nb, --nonblock
          Fail  rather  than  wait  if  the  lock  cannot  be  immediately
          acquired.  See the -E option for the exit code used.

   -o, --close
          Close  the  file  descriptor  on  which  the lock is held before
          executing command.  This is useful if  command  spawns  a  child
          process which should not be holding the lock.

   -s, --shared
          Obtain a shared lock, sometimes called a read lock.

   -u, --unlock
          Drop  a  lock.   This  is  usually not required, since a lock is
          automatically dropped when the file is closed.  However, it  may
          be  required  in  special  cases,  for  example  if the enclosed
          command group may have forked a background process which  should
          not be holding the lock.

   -w, --wait, --timeout seconds
          Fail  if  the  lock  cannot be acquired within seconds.  Decimal
          fractional values are allowed.  See the -E option for  the  exit
          code  used.  The  zero  number  of  seconds  is  interpreted  as
          --nonblock.

   --verbose
          Report how long it took to acquire the lock,  or  why  the  lock
          could not be obtained.

   -V, --version
          Display version information and exit.

   -h, --help
          Display help text and exit.

EXAMPLES

   shell1> flock /tmp -c cat
   shell2> flock -w .007 /tmp -c echo; /bin/echo $?
          Set exclusive lock to directory /tmp and the second command will
          fail.

   shell1> flock -s /tmp -c cat
   shell2> flock -s -w .007 /tmp -c echo; /bin/echo $?
          Set shared lock to directory /tmp and the  second  command  will
          not  fail.   Notice  that  attempting to get exclusive lock with
          second command would fail.

   shell> flock -x local-lock-file echo 'a b c'
          Grab the exclusive lock "local-lock-file"  before  running  echo
          with 'a b c'.

   (
     flock -n 9 || exit 1
     # ... commands executed under lock ...
   ) 9>/var/lock/mylockfile
          The  form  is convenient inside shell scripts.  The mode used to
          open the file doesn't matter to flock; using > or >> allows  the
          lockfile  to  be  created if it does not already exist, however,
          write permission is required.  Using < requires  that  the  file
          already exists but only read permission is required.

   [  "${FLOCKER}"  != "$0" ] && exec env FLOCKER="$0" flock -en "$0" "$0"
   "$@" || :
          This is useful boilerplate code for shell scripts.   Put  it  at
          the  top  of  the  shell  script  you  want  to  lock  and it'll
          automatically lock itself on the first  run.   If  the  env  var
          $FLOCKER  is not set to the shell script that is being run, then
          execute flock and grab an exclusive non-blocking lock (using the
          script  itself  as  the lock file) before re-execing itself with
          the right arguments.  It also sets the FLOCKER env  var  to  the
          right value so it doesn't run again.

EXIT STATUS

   The  command  uses sysexits.h return values for everything, except when
   using either of the options -n or -w which report a failure to  acquire
   the lock with a return value given by the -E option, or 1 by default.

   When  using  the  command variant, and executing the child worked, then
   the exit status is that of the child command.

AUTHOR

   H. Peter Anvin hpa@zytor.com

COPYRIGHT

   Copyright  2003-2006 H. Peter Anvin.
   This is free software; see the source for copying conditions.  There is
   NO  warranty;  not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
   PURPOSE.

SEE ALSO

   flock(2)

AVAILABILITY

   The flock command is part of the util-linux package  and  is  available
   from  Linux  Kernel Archive ftp://ftp.kernel.org/pub/linux/utils/util-
   linux/.





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.