linux pgrep l sleep,bash – 使用pgrep确定进程是否正在运行

我有一个脚本,我只想运行一次.如果脚本第二次被调用,我会检查它是否存在锁定文件.如果锁存文件存在,那么我想看看进程是否实际运行.

我一直在搞乱pgrep,但没有得到预期的结果:

#!/bin/bash

COUNT=$(pgrep $(basename $0) | wc -l)

PSTREE=$(pgrep $(basename $0) ; pstree -p $$)

echo "###"

echo $COUNT

echo $PSTREE

echo "###"

echo "$(basename $0) :" `pgrep -d, $(basename $0)`

echo sleeping.....

sleep 10

我得到的结果是:

$./test.sh

###

2

2581 2587 test.sh(2581)---test.sh(2587)---pstree(2591)

###

test.sh : 2581

sleeping.....

我不明白为什么当只有一个进程实际运行时我得到一个“2”.

有任何想法吗?我确定这就是我打电话的方式.我已经尝试了许多不同的组合,似乎无法弄明白.

解:

我最终做的是这样做(我的部分脚本):

function check_lockfile {

# Check for previous lockfiles

if [ -e $LOCKFILE ]

then

echo "Lockfile $LOCKFILE already exists. Checking to see if process is actually running...." >> $LOGFILE 2>&1

# is it running?

if [ $(ps -elf | grep $(cat $LOCKFILE) | grep $(basename $0) | wc -l) -gt 0 ]

then

abort "ERROR! - Process is already running at PID: $(cat $LOCKFILE). Exitting..."

else

echo "Process is not running. Removing $LOCKFILE" >> $LOGFILE 2>&1

rm -f $LOCKFILE

fi

else

echo "Lockfile $LOCKFILE does not exist." >> $LOGFILE 2>&1

fi

}

function create_lockfile {

# Check for previous lockfile

check_lockfile

#Create lockfile with the contents of the PID

echo "Creating lockfile with PID:" $$>> $LOGFILE 2>&1

echo -n $$> $LOCKFILE

echo "" >> $LOGFILE 2>&1

}

# Acquire lock file

create_lockfile >> $LOGFILE 2>&1 \

|| echo "ERROR! - Failed to acquire lock!"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值