diff --git a/resmon b/resmon
index fd78b852d33f7fae6de53ca9f1545a5f4ee27a8c..5bd1cf6a097e48fd4798ebf9243644c6b170b75f 100755
--- a/resmon
+++ b/resmon
@@ -13,7 +13,7 @@ use POSIX qw( :sys_wait_h setsid );
 use Getopt::Long;
 use Data::Dumper;
 use vars qw($config_file $debug $status_file $interface $port $config
-$status $update);
+$status $update $pid_file);
 
 use Resmon::Config;
 use Resmon::ExtComm;
@@ -26,6 +26,7 @@ GetOptions(
     "d"   => \$debug,
     "f=s" => \$status_file,
     "u"   => \$update,
+    "r=s" => \$pid_file,
 );
 
 if ($update) {
@@ -42,6 +43,7 @@ sub configure {
     $config->{statusfile} = $status_file if($status_file);
     $config->{port} = $port if($port);
     $config->{interface} = $interface if($interface);
+    $config->{pidfile} = $pid_file if ($pid_file);
 }
 
 configure();
@@ -77,7 +79,15 @@ unless($debug) {
     open(STDIN, "</dev/null");
     open(STDOUT, ">/dev/null");
     open(STDERR, ">/dev/null");
-    fork && exit;
+    my $pid=fork;
+    if ($pid) {
+      if (my $PIDFILE=$config->{pidfile}) {
+        open(PIDFILE,">$PIDFILE") or die "can't open >$PIDFILE";
+        print PIDFILE $pid;
+        close PIDFILE or die "can't close $PIDFILE";
+      }
+      exit;
+    }
 }
 
 my $list = [];
diff --git a/resources/resmon-systemd.service b/resources/resmon-systemd.service
index 7d6422bef296810d1d9f6f8ba3146f331d257552..2bc61e067044d90ce46ae632c36ab25adf676726 100644
--- a/resources/resmon-systemd.service
+++ b/resources/resmon-systemd.service
@@ -5,8 +5,10 @@ After=network.target
 
 [Service]
 Type=forking
-ExecStart=/opt/resmon/resmon
+ExecStart=/opt/resmon/resmon -r /run/resmon.pid
 Restart=on-failure
+PIDFile=/run/resmon.pid
+ExecReload=/bin/kill -HUP $MAINPID
 
 [Install]
 WantedBy=multi-user.target