How do I tell a script to wait for a process to start accepting requests on a port?Bash: Check that process...
Temporarily moving a SQL Server 2016 database to SQL Server 2017 and then moving back. Is it possible?
What to do as a player when ranger animal companion dies
All numbers in a 5x5 Minesweeper grid
What was the deeper meaning of Hermione wanting the cloak?
Weapon class firing logic in JavaScript
Algorithm for competing cells of 0s and 1s
What did the controller say during my approach to land (audio clip)?
What is the maximum viable speed for a projectile within earth's atmosphere?
How should errors be reported in scientific libraries?
Why do things cool down?
Is this quote, "just ten trading days represent 63 per cent of the returns of the past 50 years" true?
Should I inform my future product owner that there is a good chance that a team member will leave the company soon?
Microservices and Stored Procedures
How to influence manager to not schedule team meetings during lunch?
As an employer, can I compel my employees to vote?
Specifying BOM substitutions / alternatives with Contract Manufacturer (CM)
Is there any reason nowadays to use a neon indicator lamp instead of a LED?
Why is the stock market so unpredictable?
I feel like most of my characters are the same, what can I do?
Should the pagination be reset when changing the order?
The 100 soldier problem
Applications of mathematics in clinical setting
Integrability of log of distance function
Is a global DNS record a security risk for phpMyAdmin?
How do I tell a script to wait for a process to start accepting requests on a port?
Bash: Check that process has started before continuing scriptRoute incoming network requests for a given port to different applicationsBash script wait for processes and get return codeWait for background processes to finish with inverse match process IDShell script to wait for a packet from a certain portShell script wait for background commandHow can I start a process with any name which does nothing?Wait for foreground process to emit string, then send to backgroundWait for forked process to open a windowHow can I kill a process running on a specific IP and port?How to wait for all files and copy into dir
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
I need a command that will wait for a process to start accepting requests on a specific port.
Is there something in linux that does that?
while (checkAlive -host localhost -port 13000 == false)
do some waiting
...
shell networking process open-files
add a comment
|
I need a command that will wait for a process to start accepting requests on a specific port.
Is there something in linux that does that?
while (checkAlive -host localhost -port 13000 == false)
do some waiting
...
shell networking process open-files
add a comment
|
I need a command that will wait for a process to start accepting requests on a specific port.
Is there something in linux that does that?
while (checkAlive -host localhost -port 13000 == false)
do some waiting
...
shell networking process open-files
I need a command that will wait for a process to start accepting requests on a specific port.
Is there something in linux that does that?
while (checkAlive -host localhost -port 13000 == false)
do some waiting
...
shell networking process open-files
shell networking process open-files
edited Jan 9 '11 at 17:44
Gilles
575k140 gold badges1188 silver badges1700 bronze badges
575k140 gold badges1188 silver badges1700 bronze badges
asked Dec 31 '10 at 15:53
WillWill
2881 gold badge3 silver badges6 bronze badges
2881 gold badge3 silver badges6 bronze badges
add a comment
|
add a comment
|
3 Answers
3
active
oldest
votes
The best test to see if a server is accepting connections is to actually try connecting. Use a regular client for whatever protocol your server speaks and try a no-op command.
If you want a lightweight TCP or UDP client you can drive simply from the shell, use netcat. How to program a conversation depends on the protocol; many protocols have the server close the connection on a certain input, and netcat will then exit.
while ! echo exit | nc localhost 13000; do sleep 10; done
You can also tell netcat to exit after establishing the connection. It returns 1 if there's no connection and 0 if there is so we negate its output. Depending on your version of netcat, it may support one or both of the following commands:
while ! nc -z localhost 13000 </dev/null; do sleep 10; done
while ! nc -q 1 localhost 13000 </dev/null; do sleep 10; done
An alternative approach is to wait for the server process to open a listening socket.
while netstat -lnt | awk '$4 ~ /:13000$/ {exit 1}'; do sleep 10; done
If you are on Mac OS, netstat uses a slightly different output format, so you would want the following intead:
while netstat -lnt | awk '$4 ~ /.13000$/ {exit 1}'; do sleep 10; done
Or you might want to target a specific process ID:
while ! lsof -n -Fn -p $pid | grep -q '^n.*:13000$'; do sleep 10; done
I can't think of any way to react to the process starting to listen to the socket (which would avoid a polling approach) short of using ptrace
.
I think netcat is the answer, so thank you. To clarify, what I'm trying to do is write a script as part of a load balancing procedure. I need to start a process, wait for it to accept requests on the port and then shutdown the original. If there are better ways of doing this, rather than writing my own script, I'm all ears.
– Will
Dec 31 '10 at 16:36
@Will: That's a very different question! I've written a different answer.
– Gilles
Dec 31 '10 at 17:37
1
I like netcat solution too. I have a script usingnc -w 2 </dev/null >/dev/null
— if the connection takes more than 2 seconds, it times out and fails — which is handy for my usage.
– ephemient
Jan 9 '11 at 23:10
FYI, I can't get the 'while nc -q 1 localhost 13000 </dev/null; do sleep 10; done' one to work. It just returns immediately. The first one works fine though. Thanks!
– Ellis Percival
Mar 19 '15 at 16:04
@Flytenc -q 1 localhost 13000 </dev/null
returns immediately if no server is listening, but it returns with an error code, so the loop makes it sleep and try again a few seconds later.
– Gilles
Mar 19 '15 at 17:16
|
show 4 more comments
If you have bash and coreutils (e.g. timeout, sleep), but not nc/lsof/netstat, you can use this solution which uses bash magic tcp sockets:
while ! timeout 1 bash -c "echo > /dev/tcp/localhost/13000"; do sleep 10; done
To elaborate, Bash has the optional feature of connecting to TCP sockets using "network redirections" -- gnu.org/software/bash/manual/html_node/…
– johntellsall
Dec 23 '14 at 17:25
add a comment
|
Following the previous example with bash
tcp sockets magic, here is an enhanced version which waits for connection during limited amount of time.
timeout 15 bash -c 'until echo > /dev/tcp/localhost/13000; do sleep 0.5; done'
The difference is that if connection wasn't available during 15s
, - it won't loop forever but exit with the error code.
This is useful in init scripts to wait for service readiness/availability after startup.
add a comment
|
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f5277%2fhow-do-i-tell-a-script-to-wait-for-a-process-to-start-accepting-requests-on-a-po%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
The best test to see if a server is accepting connections is to actually try connecting. Use a regular client for whatever protocol your server speaks and try a no-op command.
If you want a lightweight TCP or UDP client you can drive simply from the shell, use netcat. How to program a conversation depends on the protocol; many protocols have the server close the connection on a certain input, and netcat will then exit.
while ! echo exit | nc localhost 13000; do sleep 10; done
You can also tell netcat to exit after establishing the connection. It returns 1 if there's no connection and 0 if there is so we negate its output. Depending on your version of netcat, it may support one or both of the following commands:
while ! nc -z localhost 13000 </dev/null; do sleep 10; done
while ! nc -q 1 localhost 13000 </dev/null; do sleep 10; done
An alternative approach is to wait for the server process to open a listening socket.
while netstat -lnt | awk '$4 ~ /:13000$/ {exit 1}'; do sleep 10; done
If you are on Mac OS, netstat uses a slightly different output format, so you would want the following intead:
while netstat -lnt | awk '$4 ~ /.13000$/ {exit 1}'; do sleep 10; done
Or you might want to target a specific process ID:
while ! lsof -n -Fn -p $pid | grep -q '^n.*:13000$'; do sleep 10; done
I can't think of any way to react to the process starting to listen to the socket (which would avoid a polling approach) short of using ptrace
.
I think netcat is the answer, so thank you. To clarify, what I'm trying to do is write a script as part of a load balancing procedure. I need to start a process, wait for it to accept requests on the port and then shutdown the original. If there are better ways of doing this, rather than writing my own script, I'm all ears.
– Will
Dec 31 '10 at 16:36
@Will: That's a very different question! I've written a different answer.
– Gilles
Dec 31 '10 at 17:37
1
I like netcat solution too. I have a script usingnc -w 2 </dev/null >/dev/null
— if the connection takes more than 2 seconds, it times out and fails — which is handy for my usage.
– ephemient
Jan 9 '11 at 23:10
FYI, I can't get the 'while nc -q 1 localhost 13000 </dev/null; do sleep 10; done' one to work. It just returns immediately. The first one works fine though. Thanks!
– Ellis Percival
Mar 19 '15 at 16:04
@Flytenc -q 1 localhost 13000 </dev/null
returns immediately if no server is listening, but it returns with an error code, so the loop makes it sleep and try again a few seconds later.
– Gilles
Mar 19 '15 at 17:16
|
show 4 more comments
The best test to see if a server is accepting connections is to actually try connecting. Use a regular client for whatever protocol your server speaks and try a no-op command.
If you want a lightweight TCP or UDP client you can drive simply from the shell, use netcat. How to program a conversation depends on the protocol; many protocols have the server close the connection on a certain input, and netcat will then exit.
while ! echo exit | nc localhost 13000; do sleep 10; done
You can also tell netcat to exit after establishing the connection. It returns 1 if there's no connection and 0 if there is so we negate its output. Depending on your version of netcat, it may support one or both of the following commands:
while ! nc -z localhost 13000 </dev/null; do sleep 10; done
while ! nc -q 1 localhost 13000 </dev/null; do sleep 10; done
An alternative approach is to wait for the server process to open a listening socket.
while netstat -lnt | awk '$4 ~ /:13000$/ {exit 1}'; do sleep 10; done
If you are on Mac OS, netstat uses a slightly different output format, so you would want the following intead:
while netstat -lnt | awk '$4 ~ /.13000$/ {exit 1}'; do sleep 10; done
Or you might want to target a specific process ID:
while ! lsof -n -Fn -p $pid | grep -q '^n.*:13000$'; do sleep 10; done
I can't think of any way to react to the process starting to listen to the socket (which would avoid a polling approach) short of using ptrace
.
I think netcat is the answer, so thank you. To clarify, what I'm trying to do is write a script as part of a load balancing procedure. I need to start a process, wait for it to accept requests on the port and then shutdown the original. If there are better ways of doing this, rather than writing my own script, I'm all ears.
– Will
Dec 31 '10 at 16:36
@Will: That's a very different question! I've written a different answer.
– Gilles
Dec 31 '10 at 17:37
1
I like netcat solution too. I have a script usingnc -w 2 </dev/null >/dev/null
— if the connection takes more than 2 seconds, it times out and fails — which is handy for my usage.
– ephemient
Jan 9 '11 at 23:10
FYI, I can't get the 'while nc -q 1 localhost 13000 </dev/null; do sleep 10; done' one to work. It just returns immediately. The first one works fine though. Thanks!
– Ellis Percival
Mar 19 '15 at 16:04
@Flytenc -q 1 localhost 13000 </dev/null
returns immediately if no server is listening, but it returns with an error code, so the loop makes it sleep and try again a few seconds later.
– Gilles
Mar 19 '15 at 17:16
|
show 4 more comments
The best test to see if a server is accepting connections is to actually try connecting. Use a regular client for whatever protocol your server speaks and try a no-op command.
If you want a lightweight TCP or UDP client you can drive simply from the shell, use netcat. How to program a conversation depends on the protocol; many protocols have the server close the connection on a certain input, and netcat will then exit.
while ! echo exit | nc localhost 13000; do sleep 10; done
You can also tell netcat to exit after establishing the connection. It returns 1 if there's no connection and 0 if there is so we negate its output. Depending on your version of netcat, it may support one or both of the following commands:
while ! nc -z localhost 13000 </dev/null; do sleep 10; done
while ! nc -q 1 localhost 13000 </dev/null; do sleep 10; done
An alternative approach is to wait for the server process to open a listening socket.
while netstat -lnt | awk '$4 ~ /:13000$/ {exit 1}'; do sleep 10; done
If you are on Mac OS, netstat uses a slightly different output format, so you would want the following intead:
while netstat -lnt | awk '$4 ~ /.13000$/ {exit 1}'; do sleep 10; done
Or you might want to target a specific process ID:
while ! lsof -n -Fn -p $pid | grep -q '^n.*:13000$'; do sleep 10; done
I can't think of any way to react to the process starting to listen to the socket (which would avoid a polling approach) short of using ptrace
.
The best test to see if a server is accepting connections is to actually try connecting. Use a regular client for whatever protocol your server speaks and try a no-op command.
If you want a lightweight TCP or UDP client you can drive simply from the shell, use netcat. How to program a conversation depends on the protocol; many protocols have the server close the connection on a certain input, and netcat will then exit.
while ! echo exit | nc localhost 13000; do sleep 10; done
You can also tell netcat to exit after establishing the connection. It returns 1 if there's no connection and 0 if there is so we negate its output. Depending on your version of netcat, it may support one or both of the following commands:
while ! nc -z localhost 13000 </dev/null; do sleep 10; done
while ! nc -q 1 localhost 13000 </dev/null; do sleep 10; done
An alternative approach is to wait for the server process to open a listening socket.
while netstat -lnt | awk '$4 ~ /:13000$/ {exit 1}'; do sleep 10; done
If you are on Mac OS, netstat uses a slightly different output format, so you would want the following intead:
while netstat -lnt | awk '$4 ~ /.13000$/ {exit 1}'; do sleep 10; done
Or you might want to target a specific process ID:
while ! lsof -n -Fn -p $pid | grep -q '^n.*:13000$'; do sleep 10; done
I can't think of any way to react to the process starting to listen to the socket (which would avoid a polling approach) short of using ptrace
.
edited 45 mins ago
Dwight Guth
31 bronze badge
31 bronze badge
answered Dec 31 '10 at 16:23
GillesGilles
575k140 gold badges1188 silver badges1700 bronze badges
575k140 gold badges1188 silver badges1700 bronze badges
I think netcat is the answer, so thank you. To clarify, what I'm trying to do is write a script as part of a load balancing procedure. I need to start a process, wait for it to accept requests on the port and then shutdown the original. If there are better ways of doing this, rather than writing my own script, I'm all ears.
– Will
Dec 31 '10 at 16:36
@Will: That's a very different question! I've written a different answer.
– Gilles
Dec 31 '10 at 17:37
1
I like netcat solution too. I have a script usingnc -w 2 </dev/null >/dev/null
— if the connection takes more than 2 seconds, it times out and fails — which is handy for my usage.
– ephemient
Jan 9 '11 at 23:10
FYI, I can't get the 'while nc -q 1 localhost 13000 </dev/null; do sleep 10; done' one to work. It just returns immediately. The first one works fine though. Thanks!
– Ellis Percival
Mar 19 '15 at 16:04
@Flytenc -q 1 localhost 13000 </dev/null
returns immediately if no server is listening, but it returns with an error code, so the loop makes it sleep and try again a few seconds later.
– Gilles
Mar 19 '15 at 17:16
|
show 4 more comments
I think netcat is the answer, so thank you. To clarify, what I'm trying to do is write a script as part of a load balancing procedure. I need to start a process, wait for it to accept requests on the port and then shutdown the original. If there are better ways of doing this, rather than writing my own script, I'm all ears.
– Will
Dec 31 '10 at 16:36
@Will: That's a very different question! I've written a different answer.
– Gilles
Dec 31 '10 at 17:37
1
I like netcat solution too. I have a script usingnc -w 2 </dev/null >/dev/null
— if the connection takes more than 2 seconds, it times out and fails — which is handy for my usage.
– ephemient
Jan 9 '11 at 23:10
FYI, I can't get the 'while nc -q 1 localhost 13000 </dev/null; do sleep 10; done' one to work. It just returns immediately. The first one works fine though. Thanks!
– Ellis Percival
Mar 19 '15 at 16:04
@Flytenc -q 1 localhost 13000 </dev/null
returns immediately if no server is listening, but it returns with an error code, so the loop makes it sleep and try again a few seconds later.
– Gilles
Mar 19 '15 at 17:16
I think netcat is the answer, so thank you. To clarify, what I'm trying to do is write a script as part of a load balancing procedure. I need to start a process, wait for it to accept requests on the port and then shutdown the original. If there are better ways of doing this, rather than writing my own script, I'm all ears.
– Will
Dec 31 '10 at 16:36
I think netcat is the answer, so thank you. To clarify, what I'm trying to do is write a script as part of a load balancing procedure. I need to start a process, wait for it to accept requests on the port and then shutdown the original. If there are better ways of doing this, rather than writing my own script, I'm all ears.
– Will
Dec 31 '10 at 16:36
@Will: That's a very different question! I've written a different answer.
– Gilles
Dec 31 '10 at 17:37
@Will: That's a very different question! I've written a different answer.
– Gilles
Dec 31 '10 at 17:37
1
1
I like netcat solution too. I have a script using
nc -w 2 </dev/null >/dev/null
— if the connection takes more than 2 seconds, it times out and fails — which is handy for my usage.– ephemient
Jan 9 '11 at 23:10
I like netcat solution too. I have a script using
nc -w 2 </dev/null >/dev/null
— if the connection takes more than 2 seconds, it times out and fails — which is handy for my usage.– ephemient
Jan 9 '11 at 23:10
FYI, I can't get the 'while nc -q 1 localhost 13000 </dev/null; do sleep 10; done' one to work. It just returns immediately. The first one works fine though. Thanks!
– Ellis Percival
Mar 19 '15 at 16:04
FYI, I can't get the 'while nc -q 1 localhost 13000 </dev/null; do sleep 10; done' one to work. It just returns immediately. The first one works fine though. Thanks!
– Ellis Percival
Mar 19 '15 at 16:04
@Flyte
nc -q 1 localhost 13000 </dev/null
returns immediately if no server is listening, but it returns with an error code, so the loop makes it sleep and try again a few seconds later.– Gilles
Mar 19 '15 at 17:16
@Flyte
nc -q 1 localhost 13000 </dev/null
returns immediately if no server is listening, but it returns with an error code, so the loop makes it sleep and try again a few seconds later.– Gilles
Mar 19 '15 at 17:16
|
show 4 more comments
If you have bash and coreutils (e.g. timeout, sleep), but not nc/lsof/netstat, you can use this solution which uses bash magic tcp sockets:
while ! timeout 1 bash -c "echo > /dev/tcp/localhost/13000"; do sleep 10; done
To elaborate, Bash has the optional feature of connecting to TCP sockets using "network redirections" -- gnu.org/software/bash/manual/html_node/…
– johntellsall
Dec 23 '14 at 17:25
add a comment
|
If you have bash and coreutils (e.g. timeout, sleep), but not nc/lsof/netstat, you can use this solution which uses bash magic tcp sockets:
while ! timeout 1 bash -c "echo > /dev/tcp/localhost/13000"; do sleep 10; done
To elaborate, Bash has the optional feature of connecting to TCP sockets using "network redirections" -- gnu.org/software/bash/manual/html_node/…
– johntellsall
Dec 23 '14 at 17:25
add a comment
|
If you have bash and coreutils (e.g. timeout, sleep), but not nc/lsof/netstat, you can use this solution which uses bash magic tcp sockets:
while ! timeout 1 bash -c "echo > /dev/tcp/localhost/13000"; do sleep 10; done
If you have bash and coreutils (e.g. timeout, sleep), but not nc/lsof/netstat, you can use this solution which uses bash magic tcp sockets:
while ! timeout 1 bash -c "echo > /dev/tcp/localhost/13000"; do sleep 10; done
answered Aug 7 '14 at 17:31
kanakakanaka
2712 silver badges4 bronze badges
2712 silver badges4 bronze badges
To elaborate, Bash has the optional feature of connecting to TCP sockets using "network redirections" -- gnu.org/software/bash/manual/html_node/…
– johntellsall
Dec 23 '14 at 17:25
add a comment
|
To elaborate, Bash has the optional feature of connecting to TCP sockets using "network redirections" -- gnu.org/software/bash/manual/html_node/…
– johntellsall
Dec 23 '14 at 17:25
To elaborate, Bash has the optional feature of connecting to TCP sockets using "network redirections" -- gnu.org/software/bash/manual/html_node/…
– johntellsall
Dec 23 '14 at 17:25
To elaborate, Bash has the optional feature of connecting to TCP sockets using "network redirections" -- gnu.org/software/bash/manual/html_node/…
– johntellsall
Dec 23 '14 at 17:25
add a comment
|
Following the previous example with bash
tcp sockets magic, here is an enhanced version which waits for connection during limited amount of time.
timeout 15 bash -c 'until echo > /dev/tcp/localhost/13000; do sleep 0.5; done'
The difference is that if connection wasn't available during 15s
, - it won't loop forever but exit with the error code.
This is useful in init scripts to wait for service readiness/availability after startup.
add a comment
|
Following the previous example with bash
tcp sockets magic, here is an enhanced version which waits for connection during limited amount of time.
timeout 15 bash -c 'until echo > /dev/tcp/localhost/13000; do sleep 0.5; done'
The difference is that if connection wasn't available during 15s
, - it won't loop forever but exit with the error code.
This is useful in init scripts to wait for service readiness/availability after startup.
add a comment
|
Following the previous example with bash
tcp sockets magic, here is an enhanced version which waits for connection during limited amount of time.
timeout 15 bash -c 'until echo > /dev/tcp/localhost/13000; do sleep 0.5; done'
The difference is that if connection wasn't available during 15s
, - it won't loop forever but exit with the error code.
This is useful in init scripts to wait for service readiness/availability after startup.
Following the previous example with bash
tcp sockets magic, here is an enhanced version which waits for connection during limited amount of time.
timeout 15 bash -c 'until echo > /dev/tcp/localhost/13000; do sleep 0.5; done'
The difference is that if connection wasn't available during 15s
, - it won't loop forever but exit with the error code.
This is useful in init scripts to wait for service readiness/availability after startup.
edited Apr 13 '17 at 12:37
Community♦
1
1
answered Mar 4 '17 at 15:10
armaarma
1711 silver badge3 bronze badges
1711 silver badge3 bronze badges
add a comment
|
add a comment
|
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f5277%2fhow-do-i-tell-a-script-to-wait-for-a-process-to-start-accepting-requests-on-a-po%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown