1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-13 11:51:57 +00:00

refine code for process fork.

This commit is contained in:
winlin 2016-01-20 14:09:14 +08:00
parent ce8f3b4478
commit 03469fc37d

View file

@ -227,27 +227,28 @@ int SrsProcess::start()
// should never close the fd 3+, for it myabe used. // should never close the fd 3+, for it myabe used.
// for fd should close at exec, use fnctl to set it. // for fd should close at exec, use fnctl to set it.
// log basic info // log basic info to stderr.
if (true) { if (true) {
fprintf(stderr, "\n"); fprintf(stderr, "\n");
fprintf(stderr, "process ppid=%d, cid=%d, pid=%d\n", ppid, cid, getpid()); fprintf(stderr, "process ppid=%d, cid=%d, pid=%d\n", ppid, cid, getpid());
fprintf(stderr, "process binary=%s\n", bin.c_str()); fprintf(stderr, "process binary=%s, cli: %s\n", bin.c_str(), cli.c_str());
fprintf(stderr, "process cli: %s\n", cli.c_str());
fprintf(stderr, "process actual cli: %s\n", actual_cli.c_str()); fprintf(stderr, "process actual cli: %s\n", actual_cli.c_str());
} }
// memory leak in child process, it's ok. // memory leak in child process, it's ok.
char** charpv_params = new char*[params.size() + 1]; char** argv = new char*[params.size() + 1];
for (int i = 0; i < (int)params.size(); i++) { for (int i = 0; i < (int)params.size(); i++) {
std::string& p = params[i]; std::string& p = params[i];
charpv_params[i] = (char*)p.data();
// memory leak in child process, it's ok.
char* v = new char[p.length() + 1];
argv[i] = strcpy(v, p.data());
} }
// EOF: NULL argv[params.size()] = NULL;
charpv_params[params.size()] = NULL;
// TODO: execv or execvp // use execv to start the program.
ret = execv(bin.c_str(), charpv_params); ret = execv(bin.c_str(), argv);
if (ret < 0) { if (ret < 0) {
fprintf(stderr, "fork process failed, errno=%d(%s)", errno, strerror(errno)); fprintf(stderr, "fork process failed, errno=%d(%s)", errno, strerror(errno));
} }
@ -258,7 +259,7 @@ int SrsProcess::start()
if (pid > 0) { if (pid > 0) {
is_started = true; is_started = true;
srs_trace("fored process, pid=%d, bin=%s, stdout=%s, stderr=%s, argv=%s", srs_trace("fored process, pid=%d, bin=%s, stdout=%s, stderr=%s, argv=%s",
pid, bin.c_str(), stdout_file.c_str(), stdout_file.c_str(), actual_cli.c_str()); pid, bin.c_str(), stdout_file.c_str(), stderr_file.c_str(), actual_cli.c_str());
return ret; return ret;
} }