我有一个需要包装的可执行文件(无源),以确保一次不会多次调用它。我立即想到了某种队列包装器,但我实际上如何制作它以便调用我的包装器而不是可执行文件本身?有一个更好的方法吗?解决方案需要是不可见的,因为用户是其他应用程序。任何信息/建议表示赞赏。
问问题
257 次
2 回答
1
如果用户是其他应用程序,您可以重命名可执行文件(例如 name -> name.real)并使用原始名称调用包装器。为了确保一次只调用一次,您可以使用pidof
命令(例如pidof name.real
)来检查程序是否已经运行(pidof
实际上为您提供了正在运行的进程的 PID,以便您可以使用诸如kill
或其他的东西来向它发送信号)。
于 2010-05-04T21:14:10.817 回答
1
方法1:将可执行文件放在不在标准路径中的某个位置。创建一个检查哨兵文件的 shell 脚本,如果哨兵文件不存在,则执行程序,等待 ptogram 完成,然后删除哨兵文件。如果哨兵文件存在,脚本将进入一个短暂延迟的循环(1 秒?这个程序的标准执行时间是多长时间?拿那个和一半),再次检查哨兵文件,等等。
方法 2:创建一个与脚本执行相同操作的单独程序,但使用系统级信号量或锁代替。您甚至可以简单地对文件使用读/写锁。该程序将在真实程序上执行 fork() 和 exec(),在清除哨兵之前等待子退出。
于 2010-05-04T21:15:30.693 回答