terminate_req = 1;
}
+static int write_pidfile(const char *file_name, pid_t pid)
+{
+ FILE *pidfp;
+
+ pidfp = fopen(file_name, "w+");
+ if(!pidfp) {
+ PERROR("fopen (%s)", pidfile);
+ WARN("killing child process");
+ return -1;
+ }
+
+ fprintf(pidfp, "%d\n", pid);
+
+ fclose(pidfp);
+
+ return 0;
+}
+
int start_ustd(int fd)
{
struct ustcomm_ustd ustd;
return 1;
}
+ /* Write pidfile */
+ if(pidfile) {
+ result = write_pidfile(pidfile, getpid());
+ if(result == -1) {
+ ERR("failed to write pidfile");
+ return 1;
+ }
+ }
+
/* Notify parent that we are successfully started. */
if(fd != -1) {
/* write any one character */
char buf;
FILE *pidfp;
- /* It's important to write the file *before*
- * the parent ends, because the file may be
- * read as soon as the parent ends.
- */
- if(pidfile) {
- pidfp = fopen(pidfile, "w+");
- if(!pidfp) {
- PERROR("fopen (%s)", pidfile);
- WARN("killing child process");
- result = kill(child_pid, SIGTERM);
- if(result == -1) {
- PERROR("kill");
- }
- return -1;
- }
-
- fprintf(pidfp, "%d\n", child_pid);
- fclose(pidfp);
- }
-
result = read(fd[0], &buf, 1);
if(result == -1) {
PERROR("read");
pidfilepath="/tmp/usttrace-$USER-$(date +%Y%m%d%H%M%S%N)-ustd-pid"
mkfifo -m 0600 "$pidfilepath"
# Start daemon
- $USTD -d --pidfile "$pidfilepath" -s "$SOCKPATH" -o "$OUTDIR" >"$OUTDIR/ustd.log" 2>&1 &
+ $USTD --pidfile "$pidfilepath" -s "$SOCKPATH" -o "$OUTDIR" >"$OUTDIR/ustd.log" 2>&1 &
USTDPID="$(<$pidfilepath)"
export UST_DAEMON_SOCKET="$SOCKPATH"
fi
kill -SIGTERM "$USTDPID"
echo "Waiting for ustd to shutdown..."
- wait
+ wait "$(USTDPID)"
rm "$pidfilepath"
fi