V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zmqiang
V2EX  ›  程序员

有没有什么奇淫技巧防止 Linux 程序多开?

  •  
  •   zmqiang · 2022-03-08 18:34:14 +08:00 · 4113 次点击
    这是一个创建于 997 天前的主题,其中的信息可能已经有所发展或是发生改变。

    除了文件(端口、数据文件等)占用互斥以外,有没有其他方式可以防止一个 Linux 可执行文件,被执行多次形成多个进程?

    22 条回复    2022-03-09 15:08:25 +08:00
    westoy
        1
    westoy  
       2022-03-08 18:36:47 +08:00
    防多启的话锁一下 pid 文件就行了

    授权限制的话无解的吧, 别人可以放虚拟机里跑啊
    0o0O0o0O0o
        2
    0o0O0o0O0o  
       2022-03-08 18:38:11 +08:00
    先默认你只是要实现这个功能,而不是用这个防破解,那就 shared memory
    lisongeee
        3
    lisongeee  
       2022-03-08 18:42:24 +08:00   ❤️ 20
    不好意思偏个题,那叫 《奇技淫巧》不叫 《奇淫技巧》
    ivanshaoaz
        4
    ivanshaoaz  
       2022-03-08 19:38:57 +08:00   ❤️ 2
    flock
    oneegg
        5
    oneegg  
       2022-03-08 19:40:02 +08:00 via iPhone
    以前我们用过一个工具,根据网卡 Mac 生成授权(防止在多台机器上运行),然后单机上占用端口(其实单机也无所谓了,不会有太多性能)。或者参考下 oracle 根据 cpu 线程数授权?
    triptipstop
        6
    triptipstop  
       2022-03-08 20:06:00 +08:00
    服务端授权
    Kilerd
        7
    Kilerd  
       2022-03-08 20:28:49 +08:00
    file lock 或者 socket file lock
    ch2
        8
    ch2  
       2022-03-08 20:31:13 +08:00
    用 flock 锁一个 session ,得不到锁的退出
    ETiV
        9
    ETiV  
       2022-03-08 20:33:44 +08:00 via iPhone
    虚拟机太重了,放 docker 里就行
    3dwelcome
        10
    3dwelcome  
       2022-03-08 22:15:27 +08:00 via Android
    列出 process tree ,查自己的名字。
    codehz
        11
    codehz  
       2022-03-08 22:17:17 +08:00 via Android
    把内存吃满,cpu 跑满不就跑不了了?(划掉
    启动后把文件删掉(划掉
    还可以用抽象 socket (也就 unix socket 但是地址第一个字符是\0 )(也划掉
    WeiYuanStudio
        12
    WeiYuanStudio  
       2022-03-08 22:45:46 +08:00
    @lisongeee 你不纠正这个,我都没发现,大脑语义已经自动进行纠错了。
    zmqiang
        13
    zmqiang  
    OP
       2022-03-08 23:19:04 +08:00 via iPhone
    @lisongeee 学习了,没想到一直用错了🤦‍♂️
    LeeReamond
        14
    LeeReamond  
       2022-03-09 07:22:53 +08:00
    @WeiYuanStudio 汉语顺序不响影读阅啊
    ffgrinder
        15
    ffgrinder  
       2022-03-09 09:06:58 +08:00
    我看过一种实践,就是程序运行之后会写一个 lock 文件,退出的时候删除。然后第二次运行的时候会因为这个文件存在而报错?
    ohmycorolla
        16
    ohmycorolla  
       2022-03-09 09:29:04 +08:00
    @lisongeee 我关注到的也是这个 哈哈哈哈
    Davic1
        17
    Davic1  
       2022-03-09 09:42:34 +08:00
    在启动新进程之前 ,先 ps 检查一下有没有同名进程存在, 如果有, 先 kill 在启动.
    sadfQED2
        18
    sadfQED2  
       2022-03-09 09:58:53 +08:00 via Android
    除非服务端授权,不然无解吧,因为可以放虚拟机或者 docker 里面跑啊
    nmap
        19
    nmap  
       2022-03-09 11:04:00 +08:00
    flock 是正解,简单稳定可靠,生产环境都在用
    killva4624
        20
    killva4624  
       2022-03-09 11:34:14 +08:00
    还是得上授权……不然我打个 Docker 镜像就随便用了
    wenzhonghu
        21
    wenzhonghu  
       2022-03-09 12:51:55 +08:00
    奇淫技巧确实不好找。。。
    ghoul5426
        22
    ghoul5426  
       2022-03-09 15:08:25 +08:00
    文件锁不挺好的么,现在 linux 里大把进程,也还是用这种方式。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2110 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:37 · PVG 08:37 · LAX 16:37 · JFK 19:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.