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

« back to all changes in this revision

Viewing changes to 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