Когда SQLite необходимо записать, он блокирует всю базу данных, поэтому никакой другой поток / процесс не может прочитать или записать его. Вот почему ваш другой процесс получает SQLITE_BUSY. По этой причине SQLite не так хорош, если вам нужно иметь несколько потоков / процессов, использующих базу данных одновременно. Если у вас есть только два процесса, вы, вероятно, можете обойтись без него.
Что касается второй части вашего вопроса, вы можете указать SQLite повторить попытку с помощью функции sqlite3_busy_timeout , например:
sqlite3_busy_timeout(db, 100); /* Retry for up to 100 ms */