aboutsummaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2003-10-08 08:54:52 +0000
committerRoger Dingledine <arma@torproject.org>2003-10-08 08:54:52 +0000
commit746d64e63121600fe694f11c15bd9dc0e3e52c85 (patch)
tree55378a31365ecec97ea60ea40d6cf4f22f94cacc /src/or
parent8b80362c76861b046105189a6d2613821b690906 (diff)
downloadtor-746d64e63121600fe694f11c15bd9dc0e3e52c85.tar
tor-746d64e63121600fe694f11c15bd9dc0e3e52c85.tar.gz
add in basic support for pidfiles
(patch courtesy aaron turner) svn:r565
Diffstat (limited to 'src/or')
-rw-r--r--src/or/config.c2
-rw-r--r--src/or/main.c18
-rw-r--r--src/or/or.h1
3 files changed, 21 insertions, 0 deletions
diff --git a/src/or/config.c b/src/or/config.c
index d2b61a5c4..fc40e9cb7 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -153,6 +153,7 @@ static void config_assign(or_options_t *options, struct config_line *list) {
config_compare(list, "LogLevel", CONFIG_TYPE_STRING, &options->LogLevel) ||
config_compare(list, "DataDirectory", CONFIG_TYPE_STRING, &options->DataDirectory) ||
config_compare(list, "RouterFile", CONFIG_TYPE_STRING, &options->RouterFile) ||
+ config_compare(list, "PidFile", CONFIG_TYPE_STRING, &options->PidFile) ||
config_compare(list, "Nickname", CONFIG_TYPE_STRING, &options->Nickname) ||
config_compare(list, "Address", CONFIG_TYPE_STRING, &options->Address) ||
config_compare(list, "ExitPolicy", CONFIG_TYPE_STRING, &options->ExitPolicy) ||
@@ -201,6 +202,7 @@ int getconfig(int argc, char **argv, or_options_t *options) {
options->LogLevel = "info";
options->ExitPolicy = "reject 127.0.0.1:*,reject 18.244.0.188:25,accept *:*";
options->loglevel = LOG_DEBUG;
+ options->PidFile = "tor.pid";
options->DataDirectory = NULL;
options->CoinWeight = 0.1;
options->MaxConn = 900;
diff --git a/src/or/main.c b/src/or/main.c
index efcae90be..83a979e0c 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -637,6 +637,9 @@ static void catch(int the_signal) {
case SIGTERM:
case SIGINT:
log(LOG_ERR,"Catching signal %d, exiting cleanly.", the_signal);
+ /* we don't care if there was an error when we unlink,
+ nothing we could do about it anyways */
+ unlink(options.PidFile);
exit(0);
case SIGHUP:
please_reset = 1;
@@ -724,6 +727,18 @@ void daemonize(void) {
#endif
}
+void write_pidfile(char *filename) {
+ FILE *pidfile;
+
+ if ((pidfile = fopen(filename, "w")) == NULL) {
+ log_fn(LOG_WARNING, "unable to open %s for writing: %s", filename,
+ strerror(errno));
+ } else {
+ fprintf(pidfile, "%d", getpid());
+ fclose(pidfile);
+ }
+}
+
int tor_main(int argc, char *argv[]) {
if(getconfig(argc,argv,&options)) {
@@ -734,6 +749,9 @@ int tor_main(int argc, char *argv[]) {
global_read_bucket = options.TotalBandwidth; /* start it at 1 second of traffic */
stats_prev_global_read_bucket = global_read_bucket;
+ /* write our pid to the pid file */
+ write_pidfile(options.PidFile);
+
if(options.Daemon)
daemonize();
diff --git a/src/or/or.h b/src/or/or.h
index ccfe80685..5307a0b4a 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -421,6 +421,7 @@ typedef struct {
char *RouterFile;
char *Nickname;
char *Address;
+ char *PidFile;
char *ExitPolicy;
double CoinWeight;
int Daemon;