找回密码
 注册
关于网站域名变更的通知
查看: 288|回复: 1
打印 上一主题 下一主题

分享Linux实例进程代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-19 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

$ J. ?: q" G" b# }% K+ t+ \Linux实例进程代码如下:6 N  }5 @/ I+ L

- `# D9 F) l% v/ K

" m7 B- t, h% `% P8 H#include <stdio.h>
7 q- X& |4 T$ ^4 V+ L& S9 z, j8 g/ c( ?#include <stdlib.h>
0 ~- H- D! m/ k! k% j#include <unistd.h>  ?% u1 q; y2 g5 W- E9 M$ d
#include <fcntl.h>, O* f; @3 N4 I& M; Z$ F: R  h
#include <syslog.h>
9 Y+ c4 @' c* q, y" p& ?  t: F#include <string.h>
. j% F1 s  J% A+ X#include <errno.h>
; D. g5 J" @7 t4 L5 F- N' H( g#include <sys/stat.h>/ y! x, ^) |0 T9 P6 o
, w5 u4 e+ |" F1 E9 \
#define LOCKFILE "/var/run/mydaemon.pid"
& L. u; N4 [: J' \+ H#define LOCKMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
7 {/ a* B: |  S/ ?
/ u, ?3 ?" s. m  r6 {int lockfile(int fd)) G+ A5 x$ |$ o( q! W/ y
{
2 Z. ?. m/ G9 E7 u7 L( J        struct flock fl;
4 D' X$ c4 k/ H) o5 Z+ r8 ~/ S5 u/ q# A' U9 B2 L
        fl.l_type = F_WRLCK;
, {) q( I5 y! E& ~        fl.l_start = 0;
, z0 ?3 I- g3 J& N: S2 L        fl.l_whence = SEEK_SET;
* k7 ~; d, j7 ], o' `. z5 f        fl.l_len = 0;/ C) K1 V3 A* `! ^& `  v

. X9 R/ a: ?5 k! O7 _/ L3 X        return(fcntl(fd, F_SETLK, &fl));( S3 t, B+ r; Q& A0 B# P" O0 u
}
9 E: ~6 Z; m4 L8 q3 m
; a/ z# z5 u/ f& O9 H$ ]int already_running(const char *filename)
$ u6 d- |2 ~( s" _- h{- f+ r& y- ]! y
        int fd;
% S7 h7 H6 \, W/ |        char buf[16];. Z, e/ v6 X( u5 H5 [$ I

/ H+ t) f) s+ E& p% ?        fd = open(filename, O_RDWR | O_CREAT, LOCKMODE);3 T$ f* L8 P" k' u
        if (fd < 0) {  G( ?; S/ c% Z2 E4 m2 r7 B
                syslog(LOG_ERR, "can't open %s: %m\n", filename);1 s7 i0 U" b; y9 a
                exit(1);+ G5 X( ?& p2 g: {- M" v
        }
* e1 y1 o( z+ n+ n1 w5 {        if (lockfile(fd) == -1) {5 Q+ k' O- w9 G* s4 A# t- p9 X
                if (errno == EACCES || errno == EAGAIN) {
, _+ L7 P4 A* f5 z                        syslog(LOG_ERR, "file: %s already locked", filename);
) t$ I! `! v! q1 X                        close(fd);+ |9 u  F- ?5 b0 x6 b1 G4 a$ S! q
                        return 1;7 e3 |* @' q; [6 K4 l
                }- ^/ W1 v# N( d9 f( O. T  R
                syslog(LOG_ERR, "can't lock %s: %m\n", filename);
" G2 b4 g5 S, a( ~2 l                exit(1);
3 `6 m3 g) S9 s# \9 ^: t        }$ d% _& x2 ]: q6 ~0 W% h- T
        ftruncate(fd, 0);
) N- S. S8 z7 P        sprintf(buf, "%ld", (long)getpid());7 H1 K" F1 {# D! {
        write(fd, buf, strlen(buf) + 1);( l1 ^0 d9 ^) m- O( U& y
        return 0;
1 h" B! M0 U6 P/ e}# J4 i, w. O% O

" J/ J. e7 t& @. wint main(int argc, char *argv[])) H" S: g# G; `8 A" h5 X
{1 [0 u% W4 U" p' d- p
        if (already_running(LOCKFILE))
4 s( ^# p, a9 i! v4 m1 p& G' f                return 0;
8 Q9 @7 r6 }# g* B, J, |2 }  p; K
        printf("start main...\n");
2 A0 E/ D+ }1 l6 h/ l. K        sleep(100);
) m; p3 }% d: D! K. o        printf("main done!\n");
4 P3 e7 M( `7 S2 D9 v
7 i- S4 r, l+ Z) G4 p! ]: P! D        exit(0);
' E- L( x! i/ P3 l  S}

3 |" O9 W& {: C) ~4 X- [) `5 K% N$ p  L, d; v

1 h2 w7 }" S' ?2 ]/ f7 p8 B5 r$ s5 _
2 R1 @3 M# f, U7 b- g$ ?! w2 `

4 J  q1 J& r! y2 ~

2 t8 L. I3 {+ K& ^

该用户从未签到

2#
发表于 2019-9-19 18:08 | 只看该作者
看看楼主的分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 01:26 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表