如果以前启动过程,如何阻止进程启动?

时间:2013-04-23 08:41:55

标签: linux launching-application multiprocess

我的应用程序有多个进程,包括身份验证过程。如果建立连接并且身份验证成功,我需要阻止启动身份验证。我该如何实现这种行为? 平台 - linux。

2 个答案:

答案 0 :(得分:0)

您可以直接检查您的流程是否已运行相同的应用程序。 有强大的库,允许您进行高级检查,锁定资源等......取决于您使用的语言。

最简单的解决方案是创建一个锁定文件(例如在/ tmp中),该文件指示程序正在运行,并检查程序开头是否存在此类文件。 这种方法的缺点是你必须确保即使应用程序崩溃也会删除锁定文件。

答案 1 :(得分:0)

您可以利用共享信号量和小型共享内存。让我们调用信号量mutex和共享内存bool is_authenticatedmutex初始化为值1和is_authenticated,值为false。

然后您的身份验证过程变为:

wait(mutex);

if (!is_authenticated)
    authenticate();
is_authenticated = true;

signal(mutex);

然后您必须处理身份验证到期。所以当会议结束时:

wait(mutex);

assert(is_authenticated == true);  /* if not, you have been compromised */
deauthenticate();
is_authenticated = false;

signal(mutex);