diff options
author | mathias <mathias> | 2007-06-06 06:22:37 (GMT) |
---|---|---|
committer | mathias <mathias> | 2007-06-06 06:22:37 (GMT) |
commit | dff2aa33561b00e97b3561892fb690ba9f2968c6 (patch) | |
tree | e1cde447e834f5fe2cb7bbc3fd3fbd4f78c35de7 /src/FbCommands.cc | |
parent | 467cb9ac6d951bbd37cb809370fa2e5b27f7e032 (diff) | |
download | fluxbox_pavel-dff2aa33561b00e97b3561892fb690ba9f2968c6.zip fluxbox_pavel-dff2aa33561b00e97b3561892fb690ba9f2968c6.tar.bz2 |
fix for the following problem:
on *bsd /bin/sh is not just a symlink to /bin/bash as on most linux's
but a real standalone shell. and it behaves differently from "bash -c"
behavior .. it doesnt exec the command given but waits till the command
finishes. as a result a lot of "rogue" a flying around. solution is now
( $SHELL or /bin/sh ) -c exec <cmd>
Diffstat (limited to 'src/FbCommands.cc')
-rw-r--r-- | src/FbCommands.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/FbCommands.cc b/src/FbCommands.cc index afa7984..4247820 100644 --- a/src/FbCommands.cc +++ b/src/FbCommands.cc | |||
@@ -154,9 +154,12 @@ int ExecuteCmd::run() { | |||
154 | // remove last number of display and add screen num | 154 | // remove last number of display and add screen num |
155 | displaystring.erase(displaystring.size()-1); | 155 | displaystring.erase(displaystring.size()-1); |
156 | displaystring += intbuff; | 156 | displaystring += intbuff; |
157 | |||
158 | std::string exec_cmd = "exec " + m_cmd; | ||
159 | |||
157 | setsid(); | 160 | setsid(); |
158 | putenv(const_cast<char *>(displaystring.c_str())); | 161 | putenv(const_cast<char *>(displaystring.c_str())); |
159 | execl(shell, shell, "-c", m_cmd.c_str(), static_cast<void*>(NULL)); | 162 | execl(shell, shell, "-c", exec_cmd.c_str(), static_cast<void*>(NULL)); |
160 | exit(0); | 163 | exit(0); |
161 | 164 | ||
162 | return pid; // compiler happy -> we are happy ;) | 165 | return pid; // compiler happy -> we are happy ;) |