how can I make sure only one instance of gkrellm runs
Patrick O'Callaghan
pocallaghan at gmail.com
Thu Oct 16 23:08:12 UTC 2008
On Thu, 2008-10-16 at 15:56 -0700, Antonio Olivares wrote:
> Dear fellow Fedoreans,
>
> How can I make sure that only one instance of gkrellm runs. When I start one of my machines run several instances of gkrellm. I chose in the configuration run only one, but that does not work :(
>
> [olivares at localhost ~]$ whoami
> olivares
> [olivares at localhost ~]$ top
> top - 17:51:33 up 1:36, 4 users, load average: 0.36, 0.50, 0.68
> Tasks: 130 total, 1 running, 129 sleeping, 0 stopped, 0 zombie
> Cpu(s): 4.7%us, 1.0%sy, 0.0%ni, 94.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
> Mem: 773348k total, 712732k used, 60616k free, 23792k buffers
> Swap: 3114416k total, 80k used, 3114336k free, 398188k cached
>
> PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
> 2440 root 20 0 216m 63m 7200 S 3.3 8.4 6:00.98 Xorg
> 2986 olivares 20 0 23088 9832 6528 S 1.0 1.3 0:55.45 gkrellm
> 3008 olivares 20 0 23056 9868 6556 S 1.0 1.3 0:54.94 gkrellm
> 2944 olivares 20 0 103m 23m 15m S 0.7 3.1 0:18.71 plasma
> 2968 olivares 20 0 23088 9832 6528 S 0.7 1.3 0:55.39 gkrellm
> 2978 olivares 20 0 23088 9828 6528 S 0.7 1.3 0:55.75 gkrellm
> 2993 olivares 20 0 23088 9836 6528 S 0.7 1.3 0:55.34 gkrellm
> 3000 olivares 20 0 23088 9832 6528 S 0.7 1.3 0:55.55 gkrellm
> 554 root 15 -5 0 0 0 S 0.3 0.0 0:04.96 scsi_eh_1
> 2936 olivares 20 0 60492 16m 12m S 0.3 2.2 0:07.61 kwin
> 20164 olivares 20 0 73576 15m 11m S 0.3 2.0 0:00.27 konsole
> 1 root 20 0 2016 848 636 S 0.0 0.1 0:04.38 init
> 2 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd
>
> As you can see there are several gkrellm's running :(
>
> Cameron shared a script with me:
>
> #!/bin/bash
> #
> pidfile=$HOME/.grkrellm.pid
> if [ -s "$pidfile" ] && pid=$(<"$pidfile") && kill -0 "$pid" 2>/dev/null
> then
> echo GKrellM already running, pid=$pid, not starting a new one.
> else
> gkrellm & # start gkrellm
> echo $! >"$pidfile" # save the pid
> fi
>
>
> And it finds that gkrellm is already running so it quits. The script works, but I have to find a way to eliminate the extra gkrellm's.
> How can I prevent the other gkrellm's and run only one?
1) You don't say how you run the script.
2) What does "kill -0" do? "man kill" doesn't mention this possibilty.
3) The script has an obvious race condition, (i.e. if run from several
places simultaneously, there is a non-zero probability of starting more
than one process). This is because running the process and creating the
pidfile are two separate actions.
poc
More information about the fedora-list
mailing list