diff options
author | Chris Dyer <cdyer@allegro.clab.cs.cmu.edu> | 2014-03-19 23:01:55 -0400 |
---|---|---|
committer | Chris Dyer <cdyer@allegro.clab.cs.cmu.edu> | 2014-03-19 23:01:55 -0400 |
commit | 57767b8121f605b7e89e7a52c6d71be614399469 (patch) | |
tree | 4bb2e7bc0214617ce29719162327a73b86f782fc /mteval/external_scorer.cc | |
parent | dcf415944b503c0aa8e18dec4bcab1b6680cc865 (diff) |
don't get blocked on zombies
Diffstat (limited to 'mteval/external_scorer.cc')
-rw-r--r-- | mteval/external_scorer.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/mteval/external_scorer.cc b/mteval/external_scorer.cc index f1b3ed6e..c7c3de1a 100644 --- a/mteval/external_scorer.cc +++ b/mteval/external_scorer.cc @@ -4,6 +4,7 @@ #include <cstdlib> #include <cstring> #include <unistd.h> +#include <signal.h> #include <sstream> #include <iostream> #include <cassert> @@ -15,6 +16,7 @@ using namespace std; extern const char* meteor_jar_path; +extern void metric_child_signal_handler(int); map<string, boost::shared_ptr<ScoreServer> > ScoreServerManager::servers_; @@ -46,6 +48,11 @@ ScoreServer* ScoreServerManager::Instance(const string& score_type) { } ScoreServer::ScoreServer(const string& cmd) { + static bool need_init = true; + if (need_init) { + need_init = false; + signal(SIGCHLD, metric_child_signal_handler); + } cerr << "Invoking " << cmd << " ..." << endl; if (pipe(p2c) < 0) { perror("pipe"); exit(1); } if (pipe(c2p) < 0) { perror("pipe"); exit(1); } |