~ubuntu-branches/ubuntu/maverick/backintime/maverick

« back to all changes in this revision

Viewing changes to common/applicationinstance.py

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Wiltshire
  • Date: 2009-05-16 23:04:32 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20090516230432-orrutvtufbtuxsc6
Tags: 0.9.24-1
* New upstream version (closes: #527447):
  - backintime is no longer aware of 'backintime-gnome' and 'backintime-kde4'
    (you need run 'backintime-gnome' for GNOME version and 'backintime-kde4'
    for KDE4 version)
  - fix a bug that crashes the program after taking a snapshot
* Update homepage field in debian/control (closes: #527595)
* Refactor packaging to fit new upstream build system (an almost entire 
  re-write of debian/rules)
* Make configure scripts use /bin/sh instead of /bin/bash (they don't use
  bash features)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#    Back In Time
 
2
#    Copyright (C) 2008-2009 Oprea Dan
 
3
#
 
4
#    This program is free software; you can redistribute it and/or modify
 
5
#    it under the terms of the GNU General Public License as published by
 
6
#    the Free Software Foundation; either version 2 of the License, or
 
7
#    (at your option) any later version.
 
8
#
 
9
#    This program is distributed in the hope that it will be useful,
 
10
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
#    GNU General Public License for more details.
 
13
#
 
14
#    You should have received a copy of the GNU General Public License along
 
15
#    with this program; if not, write to the Free Software Foundation, Inc.,
 
16
#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
17
 
 
18
 
 
19
import os
 
20
import os.path
 
21
import time
 
22
 
 
23
 
 
24
#class used to handle one application instance mechanism
 
25
class ApplicationInstance:
 
26
 
 
27
        #specify the file used to save the application instance pid
 
28
        def __init__( self, pid_file, auto_exit = True ):
 
29
                self.pid_file = pid_file
 
30
 
 
31
                if auto_exit:
 
32
                        if self.check( True ):
 
33
                                self.start_application()
 
34
 
 
35
        #check if the current application is already running, returns True if this is the application instance
 
36
        def check( self, auto_exit = False ):
 
37
                #check if the pidfile exists
 
38
                if not os.path.isfile( self.pid_file ):
 
39
                        return True
 
40
 
 
41
                #read the pid from the file
 
42
                pid = 0
 
43
                try:
 
44
                        file = open( self.pid_file, 'rt' )
 
45
                        data = file.read()
 
46
                        file.close()
 
47
                        pid = int( data )
 
48
                except:
 
49
                        pass
 
50
 
 
51
                #check if the process with specified by pid exists
 
52
                if 0 == pid:
 
53
                        return True
 
54
 
 
55
                try:
 
56
                        os.kill( pid, 0 )       #this will raise an exception if the pid is not valid
 
57
                except:
 
58
                        return True
 
59
 
 
60
                if auto_exit:
 
61
                        #exit the application
 
62
                        print "The application is already running !"
 
63
                        exit(0) #exit raise an exception so don't put it in a try/except block
 
64
 
 
65
                return False
 
66
 
 
67
        #called when the single instance starts to save it's pid
 
68
        def start_application( self ):
 
69
                file = open( self.pid_file, 'wt' )
 
70
                file.write( str( os.getpid() ) )
 
71
                file.close()
 
72
 
 
73
        #called when the single instance exit ( remove pid file )
 
74
        def exit_application( self ):
 
75
                try:
 
76
                        os.remove( self.pid_file )
 
77
                except:
 
78
                        pass
 
79
 
 
80
 
 
81
if __name__ == '__main__':
 
82
        #create application instance
 
83
        app_instance = ApplicationInstance( '/tmp/myapp.pid' )
 
84
 
 
85
        #do something here
 
86
        print "Start MyApp"
 
87
        time.sleep(5)   #sleep 5 seconds
 
88
        print "End MyApp"
 
89
 
 
90
        #remove pid file
 
91
        app_instance.exit_application()
 
92