当前位置:  技术问答>linux和unix

怎么判断我的程序已经运行了?

    来源: 互联网  发布时间:2015-08-27

    本文导语:  怎么判断我的程序已经运行了? int main(int argc,char **argv)  {         if (fork()) exit(0);         if (fork()) exit(0);         setsid();         close(0);         close(1);         close(2);         for(;;) ...

怎么判断我的程序已经运行了?
int main(int argc,char **argv) 
{
        if (fork()) exit(0);
        if (fork()) exit(0);
        setsid();
        close(0);
        close(1);
        close(2);
        for(;;)
        {;//my code here}
        return 0;
}
一个这样的程序,可以后台运行的,就是在终端运行的时候运行了就返回控制给终端的,但是我要程序只运行一次,如果运行了就不再运行了.

|
用锁来实现吧,启动的时候查询一下,如果所已经加了就说明程序以及运行了。

|
用一个文件来记录启动信息,每次启动去查询这个文件。

|
转载:
在程序运行的时候,创建一个.pid的文件,然后以非阻塞的方式
对文件上独占锁,只要返回OK,就可以认为OK.

#if 1
FILE * pidfp;
int8 pidstr[80];

pidfp = fopen(".pid","r+");
if( pidfp == NULL )
{
pidfp = fopen(".pid","w");
if( NULL == pidfp )
{
printf("打开文件.pid失败:%sn",strerror(errno));
return 0;
}
}
if( NULL != pidfp )
{
int retcode;
int fd;
int type;

memset(pidstr,'',sizeof(pidstr));
fgets(pidstr,80,pidfp);
pidstr[80-1] = '';
rewind(pidfp);

fd = fileno(pidfp);
type = AFC_LOCK_EX | AFC_LOCK_NB;
{
struct flock sLock;
struct stat sStat;
int cmd = 0;
int retcode;

retcode = fstat(fd,&sStat);
...
memset(&sLock,'',sizeof(sLock));
sLock.l_type = F_RDLCK;
sLock.l_whence = SEEK_SET;
sLock.l_start = 0;
sLock.l_len = 0;
retcode = fcntl(fd,F_GETLK,&sLock);
if( 0 != retcode )
....
if( (AFC_LOCK_NB & type) == 0 )
cmd = F_SETLKW;
else
cmd = F_SETLK;
while(1)
{
if( (AFC_LOCK_EX & type) != 0 )
{
sLock.l_type = F_WRLCK;
retcode = fcntl(fd,cmd,&sLock);
}
else if( (AFC_LOCK_SH & type) != 0 )
{
sLock.l_type = F_RDLCK ;
retcode = fcntl(fd,cmd,&sLock);
}
if( -1 == retcode )
{
if ( EINTR == errno )
{
errno = 0;
continue;
}
else if( cmd != F_SETLK )
{
WriteLog("fcntl:F_SETLKW失败:%s",strerror(errno) );
break;
}
}
break;
}
}
if( retcode == -1 )
{
printf("进程已经启动了n");
fprintf(pidfp,"%s",pidstr);
fclose(pidfp);
return 0;
}

fprintf(pidfp,"%d",getpid());
fflush(pidfp);
}
#endif

另外共享内存、判断ps、使用信号量的方法也可以使用试下

|
ps -A|grep yourapp

|
ps -ef|grep your.out

    
 
 

您可能感兴趣的文章:

  • 中断恢复现场时怎样判断进程运行到那一步,如何无缝连续运行的呢?
  • linux编写一个脚本判断程序是否在运行,如果没运行就重启这个软件。
  • linux脚本中命令运行结果判断
  • shell如何判断当前进程是否是当天运行的进程?
  • 怎么判断一个可执行文件是否正在运行?
  • 如何用函数判断某个守护进程处入运行中
  • C#判断某程序是否运行的方法
  • 关于如何判断程序运行完成的问题,在线等候
  • 头痛的急问题:用if做判断,运行结果与实际不符
  • 如何在在一个程序中判断另一个程序是否已运行?是哪个命令或函数?
  • 如何判断程序是后台运行的?
  • 在线等,请问system函数返回值是什么值,怎么判断system运行是否成功?
  • UX下如何判断线程是否还在运行?UX下如何在for循环进入死循环时,强行停止它(不再for中处理)?
  • 请教:使用system(命令)或者exec(命令)启动一个进程执行命令,如何判断这个命令是否启动成功或正在运行?
  • *******程序中如何判断进程是否在运行?******
  • uboot怎么判断当前运行于RAM中?
  • Linux中用PHP判断程序运行状态的2个方法
  • PHP如何判断程序运行状态
  • c语言判断某一年是否为闰年的各种实现程序代码
  • 请教,在linux下如何判断程序的内存泄露?
  • 请问linux中如何判断内核是否已经启动。(在内核中写程序)
  • 请问,如何用程序判断一个用ftp传输的文件已经完成?
  • 程序如何动态检测USB硬盘的插入及如何判断有几个分区
  • 菜鸟请教,应用程序如何判断驱动程序已经挂载成功
  • 请教:在程序中创建文件夹,应该用什么函数?怎么判断文件夹存不存在呢?
  • ScoOpenServer下的进程产生core,如何判断是哪个程序产生的?
  • 用程序如何判断主板上是双网卡还是单网卡呢?
  • 在linux下用程序如何判断出主板是什么芯片组?
  • 如何判断一个程序后台执行
  • 请问如何在qt程序中判断当前的操作系统和环境??
  • 求教:给你一个程序,怎样判断它用到了哪些库
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Vectors 成员 empty():判断Vector是否为空(返回true时为空)
  • linux->shell-> if 条件判断,关于软连接的判断!
  • javascript操作html复选框checkbox:如何判断复选框是否被选中
  • shell如何判断文件是否存在,如何判断变量是否为空
  • java实现判断字符串是否全是数字的四种方法代码举例
  • 怎么判断串口已经收到数据,并及时读出?怎么判断串口已经将写入的数据发送完毕?
  • 在判断自符是否等于**时,用equals(“**”),那么如果我想判断它的值是否>=2该用什么呢?
  • 我是学pb的,判断闰年的是isdate("2-28"),但在java里怎么判断呢?
  • linux 下的自解压文件是什么格式,如何判断文件是否为自解压c++或者脚本判断均可
  • mysql中如何判断当前是字符 mysql判断字段中有无汉字
  • 知道TCP/UDP的包头,如何判断其应用层协议类型,struct tcphdr和 struct udphdr结构中那个变量能判断应用层协议类型。
  • c#判断字符是否为中文的三种方法分享(正则表达式判断)
  • 如何判断在线用户,主要是如何判断用户关闭所有窗口(即他已经不在线了)?
  • 如何判断一个数是否为4的幂次方?若是,并判断出来是多少次方?
  • 判断图片-判断位图是否是黑白图片的方法
  • JQuery 判断某个属性是否存在hasAttr用法
  • 请问如何判断一个文件夹是否存在
  • 判断文件格式的c库函数
  • sftp命令如何判断成功与否?
  • Shell条件判断疑问?
  • java判断远程服务器上的文件是否存在的方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3