diff --git a/test/core/echo/echo_test.c b/test/core/echo/echo_test.c
index 748e8bc0ef09b65d80a53b266917c5e5ce4bc13e..16d381fb6542f442294dcf64df05ae1aeb6c22f9 100644
--- a/test/core/echo/echo_test.c
+++ b/test/core/echo/echo_test.c
@@ -37,6 +37,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <signal.h>
+#include <stdlib.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 
@@ -80,6 +81,9 @@ int main(int argc, char **argv) {
   pid_t svr;
   int ret;
   int do_ipv6 = 1;
+  /* seed rng with pid, so we don't end up with the same random numbers as a
+     concurrently running test binary */
+  srand(getpid());
   if (!grpc_ipv6_loopback_available()) {
     gpr_log(GPR_INFO, "Can't bind to ::1.  Skipping IPv6 tests.");
     do_ipv6 = 0;
diff --git a/test/core/fling/fling_stream_test.c b/test/core/fling/fling_stream_test.c
index a24240ef1d936d9710fb16e0373db2594c3aa767..f6fe69824b324083f5294945568c1798fb372640 100644
--- a/test/core/fling/fling_stream_test.c
+++ b/test/core/fling/fling_stream_test.c
@@ -37,6 +37,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <signal.h>
+#include <stdlib.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 
@@ -53,6 +54,9 @@ int main(int argc, char **argv) {
   char *args[10];
   int status;
   pid_t svr, cli;
+  /* seed rng with pid, so we don't end up with the same random numbers as a
+     concurrently running test binary */
+  srand(getpid());
   /* figure out where we are */
   if (lslash) {
     memcpy(root, me, lslash - me);
diff --git a/test/core/fling/fling_test.c b/test/core/fling/fling_test.c
index c6b369518cb16257b63f475523e00bab6318ae2e..4607aa5f9884910fbdce5c2577c966be148b0b79 100644
--- a/test/core/fling/fling_test.c
+++ b/test/core/fling/fling_test.c
@@ -37,6 +37,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <signal.h>
+#include <stdlib.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 
@@ -53,6 +54,9 @@ int main(int argc, char **argv) {
   char *args[10];
   int status;
   pid_t svr, cli;
+  /* seed rng with pid, so we don't end up with the same random numbers as a
+     concurrently running test binary */
+  srand(getpid());
   /* figure out where we are */
   if (lslash) {
     memcpy(root, me, lslash - me);
diff --git a/test/core/util/test_config.c b/test/core/util/test_config.c
index 993014aa14af6bfdc331d5a0d16d3238521d98b8..fc5de9bbefba5a43c1fbe7705251889e25a9a295 100644
--- a/test/core/util/test_config.c
+++ b/test/core/util/test_config.c
@@ -33,4 +33,11 @@
 
 #include "test/core/util/test_config.h"
 
-void grpc_test_init(int argc, char **argv) {}
+#include <stdlib.h>
+#include <unistd.h>
+
+void grpc_test_init(int argc, char **argv) {
+  /* seed rng with pid, so we don't end up with the same random numbers as a
+     concurrently running test binary */
+  srand(getpid());
+}