Is there any mutex/semaphore mechanism in shell scripts?

前端 未结 3 946
名媛妹妹
名媛妹妹 2020-12-05 13:25

I\'m looking for mutex/semaphore/concurrency mechanism in shell script. Consider following situation: Unless \"a\" user does not close the shared file, \"b\" user should no

3条回答
  •  渐次进展
    2020-12-05 13:51

    You can use the flock utility to lock a file / use it as a mutex.

    Example:

    #!/bin/sh -eu
    #advanced bash stuff not needed
    : >> lock #create a file if it doesn't exist
    {
    flock 3 #lock file by filedescriptor
    
    echo $$ working with lock
    sleep 2
    echo $$ done with lock
    
    } 3

    Example usage:

    ./mx & ./mx & ./mx & #will run one at a time cuz of the lock
    

    (

    In reply to massimo's point:

    If you don't want to hardcode a filedecriptor number (it should rarely be a problem if you aren't hardcoding 0, 1, or 2, but anyway), then in bash (but not in a POSIX only shell) you can have the system pick a fd for you with:

    {
    flock $fd
    #...
    } {fd}

    )

提交回复
热议问题