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

分享Linux实例进程代码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1 O6 r5 g; J% M3 [' W3 B; T2 L( N
Linux实例进程代码如下:2 e0 G. N  v- H& L3 }* D5 ]* `

0 ^4 W! Z6 O- G; z7 K" y
/ k' x( {1 _: f6 x: r
#include <stdio.h>7 U$ D4 q! G+ E
#include <stdlib.h>
, n+ W( u- G( z! J6 V/ k. T#include <unistd.h>- y2 n4 @- ^& u2 K9 M8 J
#include <fcntl.h>
8 |. I7 o+ f2 ^' @#include <syslog.h>8 Z" c- R' G$ j' f  B; t) y
#include <string.h>
$ J8 k& ?5 r' ]; j% y& h#include <errno.h>5 j% r8 L+ @" z% b" ~
#include <sys/stat.h>
1 C% P. Y' f% H# X, Y! {3 v- o  T! E$ Z6 t7 V
#define LOCKFILE "/var/run/mydaemon.pid"
+ }* H2 ~, O8 h- {& }' U# M#define LOCKMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/ v- ], B4 i. B8 i. G3 }3 D+ b- K2 ?
) A$ e7 U( u, Z, }8 B0 [* hint lockfile(int fd). D! F0 u* B% L
{
( ?1 h' R& N$ s: m# T) g0 _        struct flock fl;8 w; A) I3 m4 _/ M9 h/ K
2 m( v1 B7 u- y3 n  _, ]( S
        fl.l_type = F_WRLCK;
! k3 ]& ^2 y9 i- t+ H        fl.l_start = 0;! O: J! e$ M: `7 w
        fl.l_whence = SEEK_SET;' e+ n2 m0 f2 ^* Q
        fl.l_len = 0;. ~3 B! ~+ [& ?
! K: F; j9 h' F$ N& i
        return(fcntl(fd, F_SETLK, &fl));+ b2 m7 g( z- X5 M6 F
}* X* @1 b6 `" g# g
1 P. k" o! e1 Z( Z! ~
int already_running(const char *filename)
! T6 V. ^9 N  s3 q{2 S4 N3 J" x9 v% ~$ y- Y
        int fd;+ H* Y+ ^* B8 _0 e1 \
        char buf[16];' f, m' w" M# v( F4 H, Y
7 z8 V  G7 M4 N' a% t+ w+ p
        fd = open(filename, O_RDWR | O_CREAT, LOCKMODE);
7 k5 ~( v$ |  g" b" \, Z        if (fd < 0) {% k; \4 Q$ Z+ f2 _+ L/ I) W
                syslog(LOG_ERR, "can't open %s: %m\n", filename);
% M9 u8 L7 Q( z  C                exit(1);
- d. F4 x/ e; `! ?' N        }
, {& T: t# V8 v5 T; ?+ D# K        if (lockfile(fd) == -1) {
7 O# F2 r7 T( E! N$ Z                if (errno == EACCES || errno == EAGAIN) {2 c" f" ], ]- d$ L8 ~8 b/ W
                        syslog(LOG_ERR, "file: %s already locked", filename);# c! i* v, |) v; @- R5 i2 w6 a4 B
                        close(fd);
& R& D6 c* P: a8 o0 n: T                        return 1;8 W# G7 d! R  [
                }7 r! g! c0 z/ A- |
                syslog(LOG_ERR, "can't lock %s: %m\n", filename);6 \$ q2 `' a2 c2 \
                exit(1);
% ]: v: y: O2 A" u- ?2 W. U' c        }
$ a* j$ q! a( ^- X, {  e/ z7 C8 U        ftruncate(fd, 0);" l6 j3 V* P& z, [1 s5 _
        sprintf(buf, "%ld", (long)getpid());* k# L' N1 `$ i) ^  ~8 ]5 m
        write(fd, buf, strlen(buf) + 1);
* g  c& H0 b( r( P6 ?# o        return 0;
! g5 K" s) w& I8 R2 T  ]8 h}
$ o/ Q/ `2 @  M3 g; t: c/ `4 x! d1 j# x
int main(int argc, char *argv[])% B8 |- ^" K! D. G( J
{
% x7 h( n3 f+ v5 h5 {8 Z# l        if (already_running(LOCKFILE))9 \3 g, v1 a- w: [# U
                return 0;# h+ t& i+ @! T) \
3 |' T  f# Z* B0 T4 T+ O- W# z: I
        printf("start main...\n");
# I/ b8 v6 [6 n        sleep(100);3 A5 s* U7 Y# I
        printf("main done!\n");" I2 z3 c% F" a- z% f' u5 N2 B
) k* T6 l. E% p$ D0 s; N) g
        exit(0);
# y! d1 d. [  l/ n: X9 ]8 {' R& a4 b}
$ y8 O% G6 U  y6 B4 d' Z
) n9 r# n: ]  O8 g% i& w: B8 d

! u0 }( s( M- V( h* E, I$ z5 B5 v4 b& F' {+ w6 n; y  p
+ k0 p; D( }  i: t

2 q4 |3 m6 h! B/ ^" M) m

6 {( t5 O: d  I3 d: N

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 02:00 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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