[20191112]flock控制命令執行順序.txt

lfree發表於2019-11-12

[20191112]flock控制命令執行順序.txt

# man flock
FLOCK(1)                        H. Peter Anvin                        FLOCK(1)

NAME
       flock - Manage locks from shell scripts

SYNOPSIS
       flock [-sxon] [-w timeout] lockfile [-c] command...

       flock [-sxun] [-w timeout] fd

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

       The first form wraps the lock around the executing a command, in a manner similar to su(1) or newgrp(1).  It
       locks a specified file, which is created (assuming appropriate permissions), if it does not already exist.

       The second form is conveninent inside shell scripts, and is usually used the following manner:

       (
         flock -s 200
         # ... commands executed under lock ...
       ) 200>/var/lock/mylockfile

       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.

       By default, if the lock cannot be immediately acquired, flock waits until the lock is available.

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

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

       -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 pro-
              cess which should not be holding the lock.

       -n, --nb, --nonblock
              Fail (with an exit code of 1) rather than wait if the lock cannot be immediately acquired.

       -w, --wait, --timeout seconds
              Fail (with an exit code of 1) if the lock cannot be acquired within seconds seconds.  Decimal fractional values are allowed.

       -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 hold ing the lock.

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

       -h, --help
              Print a help message.

AUTHOR
       Written by 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)

--//命令有點複雜,舉一個簡單例子:
# flock  -x /tmp/x.out  -c 'sleep 20' &
# flock  -x /tmp/x.out  -c 'sleep 10' &

# flock  -x /tmp/x.out  -c 'sleep 20' &
[1] 31245
# flock  -x /tmp/x.out  -c 'sleep 10' &
[2] 31247

# ps -ef | grep slee[p]
root     31245 30952  0 09:54 pts/13   00:00:00 flock -x /tmp/x.out -c sleep 20
root     31246 31245  0 09:54 pts/13   00:00:00 sleep 20
root     31247 30952  0 09:55 pts/13   00:00:00 flock -x /tmp/x.out -c sleep 10

# ps -ef | grep slee[p]
root     31247 30952  0 09:55 pts/13   00:00:00 flock -x /tmp/x.out -c sleep 10
root     31252 31247  0 09:55 pts/13   00:00:00 sleep 10
[1]-  Done                    flock -x /tmp/x.out -c 'sleep 20'

# ps -ef | grep slee[p]
[2]+  Done                    flock -x /tmp/x.out -c 'sleep 10'

--//-x exclusive lock
--//可以發現先執行sleep 20程式,然後完成後執行sleep 10程式.而不是同時執行.
--//不知道以後是否會用上,先做一個記錄.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2663625/,如需轉載,請註明出處,否則將追究法律責任。

相關文章